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 三种创建对象的方法
Oct 16 Javascript
基于javascript实现按圆形排列DIV元素(三)
Dec 02 Javascript
js实现可输入可选择的select下拉框
Dec 21 Javascript
Canvas实现放射线动画效果
Feb 15 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
Mar 17 Javascript
微信小程序自动客服功能
Nov 02 Javascript
Vue高版本中一些新特性的使用详解
Sep 25 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 Javascript
element中的$confirm的使用
Apr 26 Javascript
jQuery实现二级导航菜单的示例
Sep 30 jQuery
手写实现JS中的new
Nov 07 Javascript
ant design charts 获取后端接口数据展示
May 25 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网上商城购物车设计代码分享
2012/02/15 PHP
php实现无限级分类
2014/12/24 PHP
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
社会稳定风险评估方案
2014/06/02 职场文书
预防传染病方案
2014/06/14 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
团代会开幕词
2015/01/28 职场文书
培训师岗位职责
2015/02/14 职场文书
廉政承诺书2015
2015/04/28 职场文书
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA