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 相关文章推荐
javascript XML数据显示为HTML一例
Dec 23 Javascript
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 Javascript
理解Javascript_08_函数对象
Oct 15 Javascript
javascript object array方法使用详解
Dec 03 Javascript
javascript中的delete使用详解
Apr 11 Javascript
JavaScript中的操作符==与===介绍
Dec 31 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
javascript下使用Promise封装FileReader
Feb 19 Javascript
jQuery解决$符号命名冲突
Jun 18 Javascript
angular2模块和共享模块详解
Apr 08 Javascript
如何基于filter实现网站整体变灰功能
Apr 17 Javascript
JavaScript数组 几个常用方法总结
Nov 11 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中将网址转换为超链接的函数
2011/09/02 PHP
PHP之短标签开启设置
2013/06/17 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
PHP类的封装与继承详解
2015/09/29 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
Javascript刷新页面的实例
2017/09/23 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
Python字符转换
2008/09/06 Python
Apache如何部署django项目
2017/05/21 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
会计自荐书
2013/12/02 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
学习型班组申报材料
2014/05/31 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
六一儿童节标语
2014/10/08 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
推广普通话主题班会
2015/08/17 职场文书