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 相关文章推荐
原创javascript小游戏实现代码
Aug 19 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
Aug 20 Javascript
js实现超简单的展开、折叠目录代码
Aug 28 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
Sep 11 Javascript
浅析JavaScript Array和string的转换(推荐)
May 20 Javascript
js正则表达式replace替换变量方法
May 21 Javascript
JS库之Highlight.js的用法详解
Sep 13 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
Nov 27 Javascript
vue按需加载实例详解
Sep 06 Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 Javascript
微信小程序云函数添加数据到数据库的方法
Mar 04 Javascript
微信小程序的引导页实现代码
Jun 24 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
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
Opacity.js
2007/01/22 Javascript
SWFObject Flash js调用类
2008/07/08 Javascript
jQuery 页面 Mask实现代码
2010/01/09 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
详解python做UI界面的方法
2019/02/27 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
采购文员岗位职责
2013/11/20 职场文书
2014年会演讲稿范文
2014/01/06 职场文书
生日邀请函范文
2014/01/13 职场文书
给老师的一封建议书
2014/03/13 职场文书
父母对孩子说的话
2014/04/12 职场文书
2014年度党员自我评议
2014/09/13 职场文书
对照检查剖析材料
2014/09/30 职场文书
三人合伙协议书范本
2014/10/29 职场文书
婚前保证书范文
2015/02/28 职场文书
详解python的内存分配机制
2021/05/10 Python
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL