返回顶部按钮

341 阅读1分钟

返回顶部

<template>
  <div class="hello">
    
      <p>kkkd</p>
      <p>kkkd</p>
      <p>kkkd</p>
      <p>kkkd</p>
      <p>kkkd</p>
      <p>kkkd</p>
      <p>kkkd</p>
      <p>kkkd</p>
      <p>kkkd</p>
      <div class="top" v-show="btnFlag"  @click="backTop">返回顶部</div>
  </div>
</template>

<script>
export default {
  name: 'helloWorld',
  data () {
    return {
      btnFlag: false,
    }
  },
  mounted () {
    // 此处true需要加上,不加滚动事件可能绑定不成功
    window.addEventListener("scroll", this.handleScroll, true);
  },
  methods: {
    // 点击图片回到顶部方法,加计时器是为了过渡顺滑
    backTop() {
      let top = document.documentElement.scrollTop || document.body.scrollTop;
      // 实现滚动效果 
      const timeTop = setInterval(() => {
        document.body.scrollTop = document.documentElement.scrollTop = top -= 50;
        if (top <= 0) {
          clearInterval(timeTop);
        }
      }, 10);
    },
    //显示隐藏
    handleScroll() {
       let scrolltop = document.documentElement.scrollTop || document.body.scrollTop;
      scrolltop > 300 ? (this.btnFlag = true) : (this.btnFlag = false);
    },
  }

}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.hello{
  width: 100%;
  height: 100%;
}
p{
  width: 100%;
  height: 300px;
  margin-top: 100px;
}
.top{
  position: fixed;
  bottom: 88px;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: red;
  text-align: center;
  font-size: 14px;
  padding-top: 5px;
  right: 20px;
  cursor: pointer;
}
</style>