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标签属性type与language使用选择
Dec 02 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
Jun 05 Javascript
node.js中的events.emitter.listeners方法使用说明
Dec 10 Javascript
超级简单的jquery操作表格方法
Dec 15 Javascript
jquery实现图片随机排列的方法
May 04 Javascript
Javascript刷新页面的实例
Sep 23 Javascript
vue 2.0 购物车小球抛物线的示例代码
Feb 01 Javascript
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
原生JS实现的跳一跳小游戏完整实例
Jan 27 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
May 10 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实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
js计算精度问题小结
2013/04/22 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
简单谈谈Python流程控制语句
2016/12/04 Python
python生成excel的实例代码
2017/11/08 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
python实现共轭梯度法
2019/07/03 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
Python几种常见算法汇总
2020/06/02 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
Python descriptor(描述符)的实现
2020/11/15 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
软件设计的目标是什么
2016/12/04 面试题
小学生考试获奖感言
2014/01/30 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
司机检讨书
2014/02/13 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
暑期培训班策划方案
2014/08/26 职场文书
人大代表选举标语
2014/10/07 职场文书
委托书的样本
2015/01/28 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
mysql 获取时间方式
2022/03/20 MySQL