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继承的六大模式小结
Apr 13 Javascript
JS for循环中i++ 和 ++i的区别介绍
Jul 20 Javascript
JS实现列表的响应式排版(推荐)
Sep 01 Javascript
原生JS查找元素的方法(推荐)
Nov 22 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
Feb 19 Javascript
JavaScript如何获取到导航条中HTTP信息
Oct 10 Javascript
JavaScript模块详解
Dec 18 Javascript
vue使用中的内存泄漏【推荐】
Jul 10 Javascript
Vue源码探究之状态初始化
Nov 14 Javascript
JavaScript设计模式之责任链模式实例分析
Jan 16 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 Javascript
javascript实现获取中文汉字拼音首字母
May 19 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 清除网页病毒的方法
2008/12/05 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
微信小程序开发探究
2016/12/27 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
Python import自定义模块方法
2015/02/12 Python
浅谈Python的文件类型
2016/05/30 Python
python实现K最近邻算法
2018/01/29 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
Python使用贪婪算法解决问题
2019/10/22 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
法国体育用品商店:GO Sport
2019/10/23 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
致标枪运动员加油稿
2014/02/15 职场文书
手工社团活动方案
2014/02/17 职场文书
实习班主任自我评价
2015/03/11 职场文书
毕业设计致谢语
2015/05/14 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
Golang 并发下的问题定位及解决方案
2022/03/16 Golang