vue之封装返回顶部按钮

327 阅读1分钟

需求: 在很多商城网站或者一些其他的网站我们都可以看到,当用户在页面中向下滚动到一定位置时,就会出现一个返回顶部按钮,这样做的目的就是便于用户操作

思路: 这里的做法其实很简单,就是监听用户在页面中的滚动,判断滚动距离是否大于我们设置的,若大于则显示“返回顶部”按钮,反之不显示

说明:

  • window.pageYOffset:返回文档在垂直方向上滚动的像素数。如果文档没有垂直滚动,或者没有滚动事件发生,它将返回 0。
  • document.documentElement.scrollTop:返回 HTML 元素(即根元素)在垂直方向上滚动的像素数。通常情况下,它与 window.pageYOffset 的值相同。但是在某些情况下,例如在一些旧版本的浏览器中,可能会出现不一致的情况。
  • document.body.scrollTop:返回 body 元素在垂直方向上滚动的像素数。类似于 document.documentElement.scrollTop,它在大多数情况下与 window.pageYOffset 的值相同。但在一些特殊情况下,如在某些移动设备上,body 元素才是实际滚动的元素

在不同的浏览器和设备上,获取滚动位置的方法可能有所差异。因此,为了兼容性和准确性,我们可以使用这些方法来获取滚动位置

代码: components/backTop.vue

<template>
  <div>
    <button @click="scrollToTop" v-show="showButton">返回顶部</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      showButton: false, // 控制是否显示返回顶部按钮
    };
  },
  mounted() {
    // 监听页面滚动事件
    window.addEventListener("scroll", this.handleScroll);
  },
  beforeDestroy() {
    // 组件销毁前移除事件监听
    window.removeEventListener("scroll", this.handleScroll);
  },
  methods: {
    handleScroll() {
      const scrollTop =
        window.pageYOffset ||
        document.documentElement.scrollTop ||
        document.body.scrollTop;
      // 判断滚动距离,控制是否显示返回顶部按钮
      this.showButton = scrollTop > 300;
    },
    scrollToTop() {
      // 返回顶部
      window.scrollTo({ top: 0, behavior: "smooth" });
    },
  },
};
</script>

<style scoped>
button {
  position: fixed;
  bottom: 20px;
  right: 20px;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100px;
  height: 40px;
  border: none;
  background-color: #ccc;
  cursor: pointer;
}
</style>

父组件:home.vue

<template>
  <div style="height: 2000px">
    <BackTop></BackTop>
  </div>
</template>

<script>
import BackTop from "@/components/backTop.vue";

export default {
  components: {
    BackTop,
  },
};
</script>

初识状态: image.png

当向下滚动距离大于300px时: image.png