VUE锚点跳转增加滑动效果

3 篇文章 0 订阅

首先我通过直接的锚点跳转是实现不了滑动效果

所以首先实现锚点的跳转效果

先给点击的地方 设置一个点击事件

<a @click="handleHref()">跳转</a>

然后是被跳转的地方添加 class="industry"

 <a-row class="industry">要跳转到这里</a-row>

接下来就是点击事件 通过offsetTop获取对象到窗体顶部的距离,然后赋值给scrollTop,就能实现锚点的功能 我用谷歌浏览器document.documentElement.scrollTop

handleHref () {
      this.$nextTick(() => {
        const jump = document.querySelector('.industry')
        // 获取需要滚动的距离
        const total = jump.offsetTop

        // Chrome
         // document.body.scrollTop = total
        // Firefox
         document.documentElement.scrollTop = total
         // Safari
         // window.pageYOffset = total
      })
    },

注意一点是本该各个浏览器应该是不同的 但是我再滑动的时候 出了点bug经过排查发现直接只用document.documentElement.scrollTop这个是可以的然后就没再深究了

有大佬解答欢迎留言哈

接下来是滑动效果 所谓的滑动本质就是将距离分为了50等分 每10ms跳一次 总共跳50次进而实现滑动效果 

handleHref () {
      this.$nextTick(() => {
        const jump = document.querySelector('#industry')
        // 获取需要滚动的距离
        const total = jump.offsetTop
        // 获取网页被卷去的高
        let distance = document.documentElement.scrollTop
        console.log(document.documentElement.scrollTop)
        console.log(window.pageYOffset)
        console.log(document.body.scrollTop)
        // 平滑滚动,时长500ms,每10ms一跳,共50跳
        let step = total / 50
        console.log(distance, total)

        if (total >= distance) {
          smoothDown()
        } else {
          const newTotal = distance - total
          console.log(total, distance)
          step = newTotal / 50
          smoothUp()
        }
        function smoothDown () {
          if (distance < total) {
            distance += step
            document.body.scrollTop = distance
            document.documentElement.scrollTop = distance
            window.pageYOffset = distance
            setTimeout(smoothDown, 10)
          } else {
            document.body.scrollTop = total
            document.documentElement.scrollTop = total
            window.pageYOffset = total
          }
        }
        function smoothUp () {
          if (distance > total) {
            distance -= step
            document.body.scrollTop = distance
            document.documentElement.scrollTop = distance
            window.pageYOffset = distance
            setTimeout(smoothUp, 10)
          } else {
            document.body.scrollTop = total
            document.documentElement.scrollTop = total
            window.pageYOffset = total
          }
        }
      })
    },

 

有什么别的问题欢迎咨询留言~~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值