vue 导航锚点_点击平滑滚动,导航栏对应变化详解


Posted in Javascript onAugust 10, 2020

最终效果如下:(注意需要做锚点联动的部分并不在页面的顶部而是页面的某个div内)-chrome

vue 导航锚点_点击平滑滚动,导航栏对应变化详解

完成这个功能需要注意:

1、点击导航平滑滚动到导航内容处

2、div内滚动时当前导航需要做响应

代码如下:

1、html结构(因为从项目里截取代码,allMenuList数据内容就不贴出来了,不算难点,这个可以根据自己的项目进行调整,相应的方法和类名别弄错就行)

<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搭建脚手架报错:rollbackFailedOptinal:verb npm-session解决

vue搭建脚手架报错:

rollbackFailedOptinal:verb npm-session

解决

如果你是在公司,而你的公司又用了代理连的外网

想办法直接连外网吧,问题就是代理造成的

我用手机连电脑USB共享网络 哎,心好累

以上这篇vue 导航锚点_点击平滑滚动,导航栏对应变化详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
arguments对象
Nov 20 Javascript
使用jQuery模板来展现json数据的代码
Oct 22 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
Jul 10 Javascript
jquery实现按Enter键触发事件示例
Sep 10 Javascript
利用javascript实现全部删或清空所选的操作
May 27 Javascript
JavaScript调试之console.log调试的一个小技巧分享
Aug 07 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
在JS循环中使用async/await的方法
Oct 12 Javascript
深入理解Vue.js轻量高效的前端组件化方案
Dec 10 Javascript
createObjectURL方法实现本地图片预览
Sep 30 Javascript
JavaScript代码简化技巧实例解析
Sep 09 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
Aug 10 #Javascript
vue 实现锚点功能操作
Aug 10 #Javascript
vscode 使用Prettier插件格式化配置使用代码详解
Aug 10 #Javascript
Vue-cli 移动端布局和动画使用详解
Aug 10 #Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
Aug 10 #Javascript
在vue-cli创建的项目中使用sass操作
Aug 10 #Javascript
浅谈实现在线预览PDF的几种解决办法
Aug 10 #Javascript
You might like
百度实时推送api接口应用示例
2014/10/21 PHP
浅析php创建者模式
2014/11/25 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
firefox插件Firebug的使用教程
2010/01/02 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
python中正则的使用指南
2016/12/04 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
班风学风建设方案
2014/05/06 职场文书
大学生个人学习总结
2015/02/15 职场文书
七年级话题作文之执着
2019/11/19 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android