最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 使用scrollTop实现页面缓动的几种方式

    正文概述 掘金(陈锋)   2021-06-02   572

    背景介绍

    最近再弄一个官网,需要实现一个小效果,就是 页面滚动到一定距离,显示一个按钮,点击此按钮,页面滚动到顶部

    动手实现

    1. 首先,肯定要监听页面的滚动,可以选择监听当前页面元素,也可以选择监听window,因为项目的原因,我选择监听window,通过获取根元素的scrollTop,对比预设的值,以此判断是否显示按钮。因为scroll事件是持续触发的事件,所以这里做了 节流 处理。顺便说下,按钮的显示或隐藏也可以通过css动画,或者vue的transition组价控制,效果会更好

      const fn = throttling(() => {
        const st = document.documentElement.scrollTop
        if (st > this.wh) {
          this.topShow = true
        } else {
          this.topShow = false
        }
      }, 100)
      window.addEventListener('scroll', fn)
      // 在组件销毁时,取消对scroll事件的监听
      this.$once('hook:beforeDestroy', function() {
        window.removeEventListener('scroll', fn)
      })
      
    2. 上一步实现了按钮的显隐,接下来就实现点击按钮,页面滚动到顶部。scrollTop属性不但支持读,还支持写,所以实现的方法就是对元素(下面以ele代指)的scrollTop赋值

      // 方法1,直接对根元素赋值,当然,页面会瞬间到顶部,没有动画效果
      ele.scrollTop = 0
      
      // 方法2,通过setInterval实现,通过控制执行时间间隔和每次移动距离来保证动画过程,动画过程可能不够流畅
      const s = setInterval(() => {
          const top = ele.scrollTop - 50
          ele.scrollTop = top
          if (top < 10) {
            clearInterval(s)
          }
        }, 20)
        
      // 方法3,使用requestAnimationFrame,不会存在定时器的问题
      const go = () => {
          const top = document.documentElement.scrollTop - 40
          document.documentElement.scrollTop = top
          if (top < 10) {
            return false
          }
          requestAnimationFrame(go)
        }
        go()
      

    总结

    为了避免以后忘记,故记录下。


    起源地下载网 » 使用scrollTop实现页面缓动的几种方式

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元