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 定义function的三种方式小结
Oct 16 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
js螺旋动画效果的具体实例
Nov 15 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
js生成缩略图后上传并利用canvas重绘
May 15 Javascript
javascript中的return和闭包函数浅析
Jun 06 Javascript
javascript控制在光标位置插入文字适合表情的插入
Jun 09 Javascript
jquery中each遍历对象和数组示例
Aug 05 Javascript
JavaScript检查某个function是否是原生代码的方法
Aug 20 Javascript
详解node中创建服务进程
May 09 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
Jun 10 Javascript
vue实现在data里引入相对路径
Jun 05 Vue.js
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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
PHP 图像尺寸调整代码
2010/05/26 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
Js四则运算函数代码
2012/07/21 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
详谈python在windows中的文件路径问题
2018/04/28 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Python3多线程基础知识点
2019/02/19 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
五水共治捐款倡议书
2014/05/14 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
简历中自我评价范文
2015/03/11 职场文书
消费者理赔投诉书
2015/07/02 职场文书
运动会通讯稿600字
2015/07/20 职场文书
家访教师心得体会
2016/01/23 职场文书
教师节作文之小学四年级
2019/09/03 职场文书