vue实现滑动超出指定距离回顶部功能

vue实现滑动超出指定距离回顶部功能

效果图展示:
在这里插入图片描述
1、当页面滑动时执行scrollToTop ()函数,判断滑动的距离是否超出指定距离,注意下面获取getElementsByClassName时,是你被滑动标签的class。

mounted() {
    window.addEventListener('scroll', this.scrollToTop, true)
 }
scrollToTop () {
    let This = this
    let dom = document.getElementsByClassName('content')[0];//获取滑动模块的信息(注意class别写错)
    This.scrollTop = dom.scrollTop;
    if (This.scrollTop > 200) {
        This.btnFlag = true
    } else {
        This.btnFlag = false
    }
}

2、当超出指定距离会出来向上的小图标,点击执行backTop ()函数回顶部。图标我是用的阿里矢量图标引入到项目中,样式自己调一下。

// 点击图标回到顶部方法,加计时器是为了缓慢回到顶部
backTop () {
    let This = this
    let timer = setInterval(() => {
        let ispeed = Math.floor(-This.scrollTop / 5)
        document.getElementsByClassName('content')[0].scrollTop = This.scrollTop + ispeed
        if (This.scrollTop === 0) {
            clearInterval(timer)
        }
    }, 16)
},

完整代码请看下面:

<template>
  <div class="scrollTop-wrap">
    <div v-if="btnFlag" class="go-top">
        <li class="iconfont iconhuidaodingbu" @click="backTop()"></li>
    </div>
  </div>
</template>
<script>
  import { httpGetMethod } from '../common/httpService'
  export default {
    name: 'scrollTop',
    data: function () {
      return {
        btnFlag:false,
        scrollTop:0//当前滑动距离
      }
    },
    mounted() {
        window.addEventListener('scroll', this.scrollToTop, true)
    },
    destroyed () {
        window.removeEventListener('scroll', this.scrollToTop, true)
    },
    methods: {
        // 点击图标回到顶部方法,加计时器是为了缓慢回到顶部
        backTop () {
            let This = this
            let timer = setInterval(() => {
                let ispeed = Math.floor(-This.scrollTop / 5)
                document.getElementsByClassName('content')[0].scrollTop = This.scrollTop + ispeed
                if (This.scrollTop === 0) {
                    clearInterval(timer)
                }
            }, 16)
        },
        // 计算距离顶部的高度,当高度大于200显示回顶部图标,小于200则隐藏
        scrollToTop () {
            let This = this
            let dom = document.getElementsByClassName('content')[0];//获取滑动模块的信息(注意class别写错)
            This.scrollTop = dom.scrollTop;
            if (This.scrollTop > 200) {
                This.btnFlag = true
            } else {
                This.btnFlag = false
            }
        }
    }
  }
</script>
<style lang="scss">
  @import '../styles/mixin';
  .scrollTop-wrap {
    position: relative;
    .go-top{
      position: absolute;
      top: 430px;
      left: 260px;
      z-index: 15;
      .iconhuidaodingbu{
          font-size: 30px;
          color: #87878A;
          background-color:#fff;
          border-radius: 50%;
      }
    }
  }
</style>

在其他页面引用一下:

<template>
  <div class="wtll-wrap">
    <div calss="content">
         这里是你的滑动内容
    </div>
    <scrollTop></scrollTop>
  </div>
</template>
<script>
  import scrollTop from '../components/scrollTop'
  export default {
    name: 'wtll',
    data: function () {
      return {
      }
    },
    components: {
      scrollTop
    },
    methods: {
    }
 }
</script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值