vue实现页面回到顶部,再也不用手动滑啦

前言

当我们浏览一个较长的页面时,经常需要不停地向上滚动才能回到页面顶部,这样不仅费时费力,也会影响用户的浏览体验。为了解决这个问题,我们可以使用一键回到顶部的功能。在本文中,我将为大家介绍如何使用 vue 实现一键回到顶部功能,使得用户可以轻松地回到页面顶部,提高用户浏览体验。


如何实现

其实实现这个功能我们可以借助 scrollTop() 方法来实现。


scrollTop()

scrollTop() 方法会返回 <div> 元素的垂直滚动条位置。

参数描述
position规定以像素为单位的垂直滚动条位置

实现思路

根据提出的需求我们可以理出以下思路:

  • 需要根据屏幕的高度,判断是否显示『回到顶部』按钮;
  • 点击『回到顶部』按钮时,触发回到顶部事件,执行回到顶部操作;
  • 在回到顶部的过程中,优化视觉效果,添加定时器,达到动画的效果。

实现过程

理清了思路,下面就是用代码实现这个功能了。话不多说,下面直接进入实例。

代码中用到的方法描述
that.$refs.outerDom.scrollTop获取生成的 DOM 元素(代码意为:获取 ref 值为 outerDomDOM 元素)
document.documentElement.clientHeight获取可视区域的高度
document.body.clientHeight获取网页 body 的高度

完整代码如下

<template>
  <div class="outerBox" ref="outerDom" @scroll="getScrollTop">
    <div v-for="item in 100" :key="item">页面内容{{item}}</div>
    <div class="scrollBox" v-show="isShow" @click="goBack">⬆️</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      scrollTop: 0, //默认距离顶部的距离
      isShow: false, //控制返回顶部按钮的显隐
      scrollTrigger: false, //默认初始值
    };
  },
  computed: {},
  methods: {
    // 返回顶部事件
    goBack() {
      let that = this; // 防止this指向问题
      // 防止频繁点击,故返回顶部后设置scrollTrigger为初始值
      if (that.scrollTrigger) {
        return;
      }
      // 获取当前距离顶部的距离
      let scrollTop = this.scrollTop;
      console.log(scrollTop);
      let steep = scrollTop / 2000;
      let timer = setInterval(() => {
        that.scrollTrigger = true;
        // 滚动的速度逐渐变快,第一次走2000/1,然后减去已走的距离,下一次用剩下的距离再减去步进值,步进值也是不断变化,这样速度会越来越快
        scrollTop -= steep;
        // 步进值不改变的话会匀速缓慢上滑,不断增加步进值上滑的距离增加,视觉效果速度变快
        steep += 20;
        if (scrollTop <= 0) {
          clearInterval(timer);
          that.scrollTrigger = false;
        }
        that.$refs.outerDom.scrollTop = scrollTop;
      }, 30);
    },
    // 监听滚动条
    getScrollTop(e) {
      let that = this; // 防止this指向问题
      // 设备一屏的高度
      let clientHeight =
        document.documentElement.clientHeight || document.body.clientHeight;
      let scrollTop = e.srcElement.scrollTop;
      this.scrollTop = scrollTop;
      // 判断距离顶部多少显示回到顶部图标
      if (scrollTop > clientHeight) {
        that.isShow = true;
      } else {
        that.isShow = false;
      }
    },
  },
};
</script>
<style scoped>
/* 最外层盒子样式 */
.outerBox {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  overflow-y: auto;
  padding:4px 6px;
}
/* 返回顶部样式 */
.scrollBox {
  position: fixed;
  right: 10px;
  bottom: 20px;
  font-size: 22px;
  z-index: 99;
}
/* 浏览器滚动条样式 */
::-webkit-scrollbar {
  width: 4px;
  background: transparent;
}
::-webkit-scrollbar-thumb {
  background: rgb(174, 174, 174);
  border-radius: 50px;
}
::-webkit-scrollbar-track {
  background: transparent;
}
</style>

实现效果

在这里插入图片描述


相关推荐

微信小程序实现一键回到顶部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水星记_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值