gpt4 book ai didi

vue 导航锚点_点击平滑滚动,导航栏对应变化详解

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章vue 导航锚点_点击平滑滚动,导航栏对应变化详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

最终效果如下:(注意需要做锚点联动的部分并不在页面的顶部而是页面的某个div内)-chrome 。

vue 导航锚点_点击平滑滚动,导航栏对应变化详解

完成这个功能需要注意:

1、点击导航平滑滚动到导航内容处 。

2、div内滚动时当前导航需要做响应 。

代码如下:

1、html结构(因为从项目里截取代码,allmenulist数据内容就不贴出来了,不算难点,这个可以根据自己的项目进行调整,相应的方法和类名别弄错就行) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<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) 。

?
1
2
3
4
5
6
7
8
9
10
11
// 跳转
   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里 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 获取滚动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 导航锚点_点击平滑滚动,导航栏对应变化详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/liona_koukou/article/details/86087821 。

最后此篇关于vue 导航锚点_点击平滑滚动,导航栏对应变化详解的文章就讲到这里了,如果你想了解更多关于vue 导航锚点_点击平滑滚动,导航栏对应变化详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com