vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例


Posted in Javascript onNovember 13, 2019

最终效果如下:(注意需要做锚点联动的部分并不在页面的顶部而是页面的某个div内)-chrome

vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例

完成这个功能需要注意:

1、点击导航平滑滚动到导航内容处

2、div内滚动时当前导航需要做响应

代码如下:

1、html结构(因为从项目里截取代码数据内容就不贴出来了,不算难点,这个可以根据自己的项目进行调整,相应的方法和类名别弄错就行)

<div class="all-title">
  全部应用
  <p class="fr">
   <span v-for="(item, index) in allMenuList" :key="item.id" :class="[index===activeMenu?'active':'']" @click="jump(index)">{{ item.name }}</span>
  </p>
  </div>
  <div id="scrollBox" class="applications-content">
  <div v-for="(val, index) in allMenuList" :key="val.id" class="all-list do-jump">
   <p class="applications-title">{{ val.name }}</p>
   <ul class="applications-list">
   <li v-for="item in val.children" :key="item.id" class="applications-item" @click="changeRouterForRight(item.pathName,item.menuCode)">
    <img src="">
    <span>{{ item.name }}</span>
    <template v-if="showEdit">
    <i v-if="addOrRemove(item.menuCode)==0" class="el-icon-circle-plus add-btn" @click="addMenu(item.menuCode)" />
    <i v-if="addOrRemove(item.menuCode)==1" class="el-icon-remove remove-btn" @click="removeMenu(item.menuCode)" />
    </template>
   </li>
   </ul>
  </div>
  </div>

需要说明的数据:activeMenu-当前导航序号,scrollBox-需要在里面滚动的元素即设为overflow-y:scroll的父元素div

2、点击导航平滑滚动的方法:jump(index)

// 跳转
 jump(index) {
  this.activeMenu = index // 当前导航
  const jump = jQuery('.do-jump').eq(index)
  const scrollTop = jump.position().top + this.scrollBox.scrollTop // 获取需要滚动的距离
  // Chrome
  this.scrollBox.scrollTo({
  top: scrollTop,
  behavior: 'smooth' // 平滑滚动
  })
 }

这里有两点需要说明:一是因为我vue项目里装了jquery所以这里直接用了jquery的position().top来获取元素到父元素的距离,如果项目里没装jquery需要把这里换成js的方法来获取元素到父元素的距离(万事有Google和度娘),二是点击之后需要滚动的距离计算时别忘了加上当前div已经滚动的距离即已经被卷起的高度

-----到这里我们就可以实现1的功能

3、监听scrollBox的滚动:

写在mounted里

// 获取滚动dom元素
 this.scrollBox = document.getElementById('scrollBox')
 const jump = jQuery('.do-jump')
 const topArr = []
 for (let i = 0; i < jump.length; i++) {
  topArr.push(jump.eq(i).position().top)
 }
 // 监听dom元素的scroll事件
 this.scrollBox.addEventListener('scroll', () => {
  const current_offset_top = that.scrollBox.scrollTop
  for (let i = 0; i < topArr.length; i++) {
  if (current_offset_top <= topArr[i]) { // 根据滚动距离判断应该滚动到第几个导航的位置
   that.activeMenu = i
   break
  }
  }
 }, true)

这里需要注意addEventListener里有三个参数:'scroll' 、function、true

以上这篇vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js控制CSS样式属性语法对照表
Dec 11 Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 Javascript
原生js的弹出层且其内的窗口居中
May 14 Javascript
在JavaScript中判断整型的N种方法示例介绍
Jun 18 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
Apr 27 Javascript
JS实现文档加载完成后执行代码
Jul 09 Javascript
实例讲解javascript注册事件处理函数
Jan 09 Javascript
JS实现保留n位小数的四舍五入问题示例
Aug 03 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
Sep 04 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
vue单页面在微信下只能分享落地页的解决方案
Apr 15 Javascript
jquery获取input输入框中的值
Nov 13 #jQuery
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
Nov 13 #Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
Nov 13 #Javascript
在vue-cli中引入lodash.js并使用详解
Nov 13 #Javascript
vue 解除鼠标的监听事件的方法
Nov 13 #Javascript
在vue+element ui框架里实现lodash的debounce防抖
Nov 13 #Javascript
element实现合并单元格通用方法
Nov 13 #Javascript
You might like
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
详解php反序列化
2020/06/10 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
JavaScript 无符号右移运算符
2009/04/17 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
移动端基础事件总结与应用
2017/01/12 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
对python3新增的byte类型详解
2018/12/04 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
客户代表实习人员自我鉴定
2013/09/27 职场文书
车间操作工岗位职责
2013/12/19 职场文书
大学生学业生涯规划
2014/01/05 职场文书
承诺书范文
2014/06/03 职场文书
就业协议书怎么填
2014/09/15 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
2016猴年春节问候语
2015/11/11 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP