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 相关文章推荐
jQuery 工具函数学习资料
Apr 29 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
Feb 07 Javascript
jQuery 自定义函数写法分享
Mar 30 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 Javascript
JS中操作JSON总结
Dec 06 Javascript
8个超实用的jQuery功能代码分享
Jan 08 Javascript
JavaScript中使用Math.PI圆周率属性的方法
Jun 14 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
原生js实现焦点轮播图效果
Jan 12 Javascript
Node.js搭建WEB服务器的示例代码
Aug 15 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 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
PHP网站提速三大“软”招
2006/10/09 PHP
PHP syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
XML的代替者----JSON
2007/07/21 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
javascript 写类方式之一
2009/07/05 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
护士自我评价范文
2014/01/25 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
2014年消防工作总结
2014/11/21 职场文书
承诺函范文
2015/01/21 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
Vue+Flask实现图片传输功能
2022/04/01 Vue.js