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 相关文章推荐
一个刚完成的layout(拖动流畅,不受iframe影响)
Aug 17 Javascript
创建一个复制UBB软件信息的链接或按钮的js代码
Jan 06 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
Apr 02 Javascript
jquery png 透明解决方案(推荐)
Aug 21 Javascript
JS中confirm,alert,prompt函数区别分析
Jan 17 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
jQuery中的$.ajax()方法应用
May 06 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
Dec 08 Javascript
Vue.js tab实现选项卡切换
May 16 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
Aug 19 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
常用js脚本
2006/12/03 Javascript
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
Python中的ctime()方法使用教程
2015/05/22 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
Python爬虫开发与项目实战
2020/12/16 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
2014年情人节活动方案
2014/02/16 职场文书
采购求职信
2014/03/17 职场文书
员工工作表现评语
2014/04/26 职场文书
导师工作推荐信范文
2014/05/17 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
毕业生找工作求职信
2014/08/05 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript