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调试工具 Javascript Debug Toolkit 2.0.0版本发布
Dec 02 Javascript
响应鼠标变换表格背景或者颜色的代码
Mar 30 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
html页面显示年月日时分秒和星期几的两种方式
Aug 20 Javascript
javascript常用功能汇总
Jul 05 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
Angular学习教程之RouterLink花式跳转
May 03 Javascript
对vue 键盘回车事件的实例讲解
Aug 25 Javascript
微信小程序wxml列表渲染原理解析
Nov 27 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
PHP基础之运算符的使用方法
2013/04/28 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
numpy库reshape用法详解
2020/04/19 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
pytorch SENet实现案例
2020/06/24 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
法律进企业活动方案
2014/03/04 职场文书
协议书格式
2014/04/23 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python
Python re.sub 反向引用的实现
2021/07/07 Python
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript
详解PyTorch模型保存与加载
2022/04/28 Python
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技