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 相关文章推荐
基于jquery的jqDnR拖拽溢出的修改
Feb 12 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
Iframe实现跨浏览器自适应高度解决方法
Sep 02 Javascript
thinkphp实现无限分类(使用递归)
Dec 19 Javascript
浅析Javascript匿名函数与自执行函数
Feb 06 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
Apr 13 Javascript
深入理解Node.js中的进程管理
Mar 13 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
详解puppeteer使用代理
Dec 27 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
Apr 22 Javascript
vue实现在data里引入相对路径
Jun 05 Vue.js
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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
php中设置多级目录session的问题
2011/08/08 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
浅析Python多线程下的变量问题
2015/04/28 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
python实现自动清理重复文件
2020/08/24 Python
Python实现壁纸下载与轮换
2020/10/19 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
车间副主任岗位职责
2013/12/24 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
聚美优品广告词改编
2014/03/14 职场文书
老公给老婆的保证书
2014/04/28 职场文书
保护环境的标语
2014/06/09 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript