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 相关文章推荐
“不能执行已释放的Script代码”错误的原因及解决办法
Sep 09 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
JavaScript中实现依赖注入的思路分享
Jan 15 Javascript
jquery预加载图片的方法
May 27 Javascript
jQuery旋转插件jqueryrotate用法详解
Oct 13 Javascript
详解webpack+vue-cli项目打包技巧
Jun 17 Javascript
利用JS做网页特效_大图轮播(实例讲解)
Aug 09 Javascript
js实现rem自动匹配计算font-size的示例
Nov 18 Javascript
Angular @HostBinding()和@HostListener()用法
Mar 05 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
Sep 04 Javascript
详解javascript设计模式三:代理模式
Mar 25 Javascript
js实现贪吃蛇小游戏(加墙)
Jul 31 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
jquery动态添加option示例
2013/12/30 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
angular.bind使用心得
2015/10/26 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
js返回顶部实例分享
2016/12/21 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
详解使用nvm安装node.js
2017/07/18 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
python快排算法详解
2019/03/04 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
详解python中的模块及包导入
2019/08/30 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
EJB的激活机制
2013/10/25 面试题
校园环保广播稿(3篇)
2014/09/15 职场文书
离婚答辩状范文
2015/05/22 职场文书
钢琴师观后感
2015/06/12 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
用python自动生成日历
2021/04/24 Python
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python