0
点赞
收藏
分享

微信扫一扫

vue返回顶部操作

搬砖的小木匠 2022-02-10 阅读 63
<template>
  <div class="container">
    <div class="go-top" v-if="btnFlag" @click="backTop">
      <img :src="imgGoTopSrc" />
      <br />
      <span>回顶部</span>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      btnFlag: false,
      //记录屏幕滑动的值
      scrollTop: 0,
      imgGoTopSrc: require('@/assets/img/goTop.png'),
    }
  },
  mounted() {
    let that = this
    window.addEventListener('scroll', that.scrollToTop, true)
    // console.log(document.body.scrollTop)
  },
  destroyed: function () {
    window.removeEventListener('scroll', this.scrollToTop)
  },
  methods: {
    //返回顶部
    backTop() {
      const that = this
      //使用定时器设置滑动过渡效果
      let timer = setInterval(() => {
        let ispeed = Math.floor(-that.scrollTop / 5)
        // console.log(ispeed)
        // console.log(that.scrollTop)
        document.documentElement.scrollTop = document.body.scrollTop =
          that.scrollTop + ispeed
        if (that.scrollTop === 0) {
          clearInterval(timer)
        }
      }, 16)
    },

    // 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏
    scrollToTop() {
      const that = this
      // console.log("window.pageYOffset",window.pageYOffset)
      // console.log("document.documentElement.scrollTop",document.documentElement.scrollTop)
      // console.log("document.body.scrollTop",document.body.scrollTop)
      // console.log("document.querySelector('.container').scrollTop",document.querySelector('.container').scrollTop)
      let scrollTop =
        window.pageYOffset ||
        document.documentElement.scrollTop ||
        document.body.scrollTop
      that.scrollTop = scrollTop
      // console.log("that.scrollTop",that.scrollTop)
      if (that.scrollTop > 60) {
        that.btnFlag = true
      } else {
        that.btnFlag = false
      }
    },
  },
}
</script>

<style scoped lang="less">
.go-top {
  background: #fff;
  position: fixed;
  z-index: 99;
  right: 13px;
  bottom: 50px;
  text-align: center;
  padding: 10px 0;
  margin-bottom: 50px;
  cursor: pointer;
  box-shadow: 0 0 6px rgb(0 0 0 / 12%);
  img {
    width: 20px;
    height: 20px;
  }
  span {
    font-size: 12px;
  }
}
</style>
举报

相关推荐

0 条评论