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 相关文章推荐
ajax请求乱码的解决方法(中文乱码)
Apr 10 Javascript
script标签属性用type还是language
Jan 21 Javascript
JS实现5秒钟自动封锁div层的方法
Feb 20 Javascript
基于JS实现类似支付宝支付密码输入框
Sep 02 Javascript
Vue.js中用v-bind绑定class的注意事项
Dec 13 Javascript
JavaScript 用fetch 实现异步下载文件功能
Jul 21 Javascript
JS脚本加载后执行相应回调函数的操作方法
Feb 28 Javascript
JavaScript生成指定范围随机数和随机序列的方法
May 05 Javascript
vue 指令之气泡提示效果的实现代码
Oct 18 Javascript
jquery轮播图插件使用方法详解
Jul 31 jQuery
Vue axios 跨域请求无法带上cookie的解决
Sep 08 Javascript
cypress测试本地web应用
Jun 01 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编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
vue+webpack中配置ESLint
2018/11/07 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
python实现的文件夹清理程序分享
2014/11/22 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
使用Python的turtle模块画国旗
2019/09/24 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
django和flask哪个值得研究学习
2020/07/31 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
python入门教程之基本算术运算符
2020/11/13 Python
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
大学生个人简历中的自我评价
2013/12/27 职场文书
学校介绍信范文
2014/01/14 职场文书
仓管员岗位责任制
2014/02/19 职场文书
移风易俗倡议书
2014/04/15 职场文书
生产车间标语
2014/06/11 职场文书
法律进社区活动总结
2015/05/07 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript
python使用torch随机初始化参数
2022/03/22 Python
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS