vue 之返回顶部组件

vue 之返回顶部组件

backTop.vue
<template>
  <div class="floating" @click="goTop()" v-show="btnFlag">
    <a href="javascript:;">
      <em class="icon-text">回顶部</em>
    </a>
  </div>
</template>
<script>
export default {
  props: ["refEle", "backTime"],
  data() {
    return {
      btnFlag: false,
    };
  },
  mounted() {
    window.addEventListener("scroll", this.isShowBtn, true);
  },
  destroyed() {
    window.removeEventListener("scroll", this.isShowBtn, true);
  },
  methods: {
    goTop() {
      // 拿到当前 需要滚动的节点 距离顶部多少距离
      // console.log('ref节点',this.refEle,this.refEle.scrollTop);
      this.timer = setInterval(() => {
        let scrollTop = this.refEle.scrollTop;
        let ispeed = Math.floor(-scrollTop / 5);
        // console.log("速度和高度", ispeed, scrollTop);
        this.refEle.scrollTop = scrollTop + ispeed;
        if (scrollTop === 0) {
          // console.log("到0了");
          clearInterval(this.timer);
        }
      }, this.backTime);
    },
    isShowBtn() {
      let scrollTop = "";
      if (this.refEle) {
        scrollTop = this.refEle.scrollTop;
      } else {
        scrollTop =
          window.pageYOffset ||
          document.documentElement.scrollTop ||
          document.body.scrollTop;
      }

      if (scrollTop > 60) {
        this.btnFlag = true;
      } else {
        this.btnFlag = false;
      }
    },
  },
};
</script>
<style scoped>
.floating {
  width: 0.65rem;
  position: fixed;
  z-index: 1600;
  right: 0.2rem;
  bottom: 1rem;
}
.floating a {
  text-decoration: none;
  margin-bottom: 0.05rem;
  display: block;
  opacity: 0.9;
  background-color: rgb(130, 130, 130);
}
.floating a:hover {
  background-color: #33AAFF;
}
</style>

home.vue引用
	// 这个需要返回顶部的节点
	<main ref="selfCon></main>
    <BackTop
      class="back_top"
      :refEle="this.$refs.selfCon"
      :backTime="30"
    ></BackTop>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值