页面代码,导航条为ul部分

        <div class="header-bookmark" ref="bookmark"><ul class="bookmark"><liv-for="(item, index) in bookmark":key="index"class="bookmark-item":class="index === bookmarkindex ? 'active' : ''"@click="changebookmark(index)"><a :href="item.href">{{ item.title }}<span class="bookmark-icon"></span></a><a class="bookmark-line" v-show="item.isline"></a></li></ul><divclass="closebook"ref="closebook"@click="closebook"v-show="isclosebook === true"><img src="@/assets/uho/images/right.png" /></div></div>

页面效果:

css略过,只要是之家了active时的样式

js代码
实现思路:
1、top()是获取元素距离最外层父元素的距离;
2、在大概的位置添加统一的class,通过document.querySelectorAll(".scroll-class")统一获取;

let h = document.querySelectorAll(".header-nav")[0].offsetHeight

这一部分是顶部导航栏在页面滑动时,会吸顶,计算出的顶部导航栏的距离,在页面滑动计算距离时需要剪掉这一部分

对获取到的DOM循环,跟当前的scrollTop循环对比,当当前页面滚动距离小于描点距离页面的top值,取符合的最小值,改变样式
如果大于,则最后一个改变样式

    top(el) {function getElementTop(elem) {var elemTop = elem.offsetTop; //获得elem元素距相对定位的父元素的topelem = elem.offsetParent; //将elem换成起相对定位的父元素while (elem != null) {//只要还有相对定位的父元素//获得父元素 距他父元素的top值,累加到结果中elemTop += elem.offsetTop; //再次将elem换成他相对定位的父元素上;elem = elem.offsetParent;}return elemTop;}return getElementTop(el);},handleScroll() {var scrollTop =window.pageYOffset ||document.documentElement.scrollTop ||document.body.scrollTop;var list = document.getElementsByClassName("bookmark-item");if (this.$refs.bookmark) {if (scrollTop >= 400) {this.$refs.bookmark.style.background = "#003c7b";this.isclosebook = true;} else {this.$refs.bookmark.style.background = "unset";this.$refs.bookmark.style.display = "block";this.isclosebook = false;this.isshowbook = false;}}//主要是下面这块代码let h = document.querySelectorAll(".header-nav")[0].offsetHeightlet DOM = document.querySelectorAll(".scroll-class");for (let i = 0; i < DOM.length; i++) {let top = this.top(DOM[i]);// console.log(222, top, scrollTop);if (scrollTop < top-h) {this.bookmarkindex = i - 1;break;}else{// console.log(666,i,DOM.length)if(i>=DOM.length-1){this.bookmarkindex = i}}}},

vue+js实现描点跳转的导航跟着滚动条实现变化相关推荐

  1. Vue.js开发记录--用watch监听对象中属性的变化

    监听对象中所有属性 存在对象obj,若想要监听其中所有的值的变化 watch: {obj: {handler (val) {// coding},deep: true}, } 监听对象中某个属性 如果 ...

  2. 如何对第一个Vue.js组件进行单元测试

    by Sarah Dayan 通过莎拉·达扬 In Build Your First Vue.js Component we made a star rating component. We've c ...

  3. 第5章 运维和发布Vue.js项目

    第5章 运维和发布Vue.js项目 一般传统公司特别喜欢一个角色用一个人,如在生产流水线上,一个工人只负责拧螺丝,另一个工人只负责喷漆.很多软件公司也是这样,有人专门负责编写代码,有人专门负责运维.但 ...

  4. 关于vue.js 编程导航的使用:实现路由配置和跳转页面

    本文主要讲述:通过vue.js 编程导航,实现路由配置和跳转页面的功能! 基础篇,仅作为简单演示. 总结 不能保证用户一定会点击某些按钮 并且当前操作,除了路由跳转以外,还会有一些别的附加操作(比如执 ...

  5. Vue.js中,如何自己维护路由跳转记录?

    在Vue的项目中,如果我们想要做返回.回退操作时,一般会调用router.go(n)这个api,但是实际操作中,使用这个api有风险,就是会让用户跳出当前应用,因为它记录的是浏览器的访问记录,而不是你 ...

  6. vue里面怎么实现页面跳转_vue.js怎样做跳转页面?

    vue.js怎样做跳转页面?下面本篇文章给大家介绍一下vue.js跳转页面.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 我们知道在vue里进行页面跳转的话,我们使用这个标签 组件 ...

  7. html页面数字滚动,Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码)...

    原文:Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码) 大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果 ...

  8. 【毕业设计】基于Vue.js画作交流平台的设计与实现

    文章目录 摘要 Abstract 引言 系统开发理论基础 开发语言简介 HTML5 JavaScript Less PHP R Python Go 框架简介 Vue.js ThinkPHP Flask ...

  9. 【转】Vue.js 2.0 快速上手精华梳理

    Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...

最新文章

  1. 用于高亮反光零件缺陷的自动视觉检测系统
  2. 阿里技术协会(ATA)11月系列精选文集
  3. Mysql5.5部署MHA
  4. 10分钟就能学会的.NET Core配置
  5. 如何利用navicat可视化软件添加与新建mysql数据库
  6. python字符串前面加u_Python 字符串前面加u,r,b,f的含义
  7. 【笔记】Linux的目录配置(a2)
  8. mysql cluster 宕机 恢复_mysql cluster 集群恢复不起来,还请大神赐教?报错-问答-阿里云开发者社区-阿里云...
  9. 解决编写C#在vscode上面不能输入问题
  10. android 输入法 监听,android 监听 输入法
  11. 【数据科学】什么是数据分析
  12. 《机器学习Python实践》第4章——Python和SciPy速成
  13. mysql学生管理系统背景_学生基本系统管理
  14. 阈值分割法——最佳阈值的选择问题
  15. 液压伺服控制系统设计
  16. HEVC中CU、TU、PU划分和扫描方式简析
  17. 4200: [Noi2015]小园丁与老司机
  18. win10开机密码怎么取消
  19. Transformer 综合讲解15-20章
  20. arduino nano + nrf24

热门文章

  1. Java语言进阶:Channel(通道)
  2. 网络异常流量数据集CIC-IDS-2017/2018 流量特征提取工具CICFlowMeter的使用
  3. 数字资产原力觉醒,颠覆性创新来自于Turing差价合约
  4. 设计模式学习笔记(六) - 组合模式 Composite (树状结构专用模式)
  5. EXT--Ext.get() 和 Ext.query() 组合使用实现最灵活的取元素方式
  6. 因为计算机安装了更新i,电脑已经安装itunes,但在安装icloud时提示“这台电脑已安装更高版本的apple ”...
  7. mysql 查询 empty set_MySQL5.6 Command Line Client进行多表连接查询显示empty set是为什么?...
  8. LVGL PC模拟器(1)
  9. python计算机考试哪里报名_全国计算机等级考试报名流程
  10. Spring系列(四)、设计模式之代理模式