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动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
jquery下异步提交表单 异步跨域提交表单
Nov 17 Javascript
JavaScript显示当前文档最后修改日期的方法
Mar 19 Javascript
JavaScript仿静态分页实现方法
Aug 04 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
Aug 13 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
js Canvas绘制圆形时钟教程
Feb 06 Javascript
React Native实现进度条弹框的示例代码
Jul 17 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
Aug 31 Javascript
element-ui组件中input等的change事件中传递自定义参数
May 22 Javascript
vue中keep-alive内置组件缓存的实例代码
Apr 16 Javascript
Node.js API详解之 console模块用法详解
May 12 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
php格式化json函数示例代码
2016/05/12 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
对python的文件内注释 help注释方法
2018/05/23 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
Python中关键字global和nonlocal的区别详解
2018/09/03 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
两道JAVA笔试题
2016/09/14 面试题
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
大学英语专业求职信
2014/06/21 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
诚信考试主题班会
2015/08/17 职场文书
关于环保的广播稿
2015/12/17 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang