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 相关文章推荐
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
Apr 17 Javascript
js调用iframe实现打印页面内容的方法
Mar 04 Javascript
异步JavaScript编程中的Promise使用方法
Jul 28 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
Sep 10 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
javascript比较语义化版本号的实现代码
Sep 09 Javascript
浅谈jQuery添加的HTML,JS失效的问题
Oct 05 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
微信js-sdk界面操作接口用法示例
Oct 12 Javascript
解决vue项目打包后提示图片文件路径错误的问题
Jul 04 Javascript
Vue watch响应数据实现方法解析
Jul 10 Javascript
Vue3为什么这么快
Sep 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
德生H-501的评价与改造
2021/03/02 无线电
php数据库连接
2006/10/09 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
php curl_init函数用法
2014/01/31 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
python自动化办公操作PPT的实现
2021/02/05 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
酒店总经理工作职责
2013/12/13 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
高中毕业生自我鉴定例文
2013/12/29 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
绿色校园广播稿
2014/10/13 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL