首页 > 其他分享 >Vue3-如何自己写一个“返回顶部”功能

Vue3-如何自己写一个“返回顶部”功能

时间:2024-07-29 11:29:08浏览次数:8  
标签:返回 const 顶部 clientHeight 视口 Vue3 滚动 document

功能描述:

在屏幕的右下角固定一个“返回顶部”按钮,只有当用户滚动屏幕一定程度后出现,否则隐藏。

点击按钮,网页平滑的滚动到页面顶部。

环境:Vue3,js,antd

具体思路:

1、给窗口挂载滚动事件,监听视口的滚动,当滚动距离超出设定阈值后,出现按钮。

2、点击按钮,滚动窗口。

具体代码:

<template>
  <div style="height: 100%; overflow-y: auto">
    <a-button class="scrollBox" v-show="isShow" @click="goBack">返回顶部</a-button>
  </div>
</template>

<script setup>
import { ref, onMounted, onUnmounted } from 'vue'

const isShow = ref(false) // 控制返回顶部按钮的显隐

// 监听滚动条
const getScrollTop = (e) => {
  const clientHeight = document.documentElement.clientHeight || document.body.clientHeight
  const currentScrollTop = window.scrollY

  // 判断距离顶部多少显示回到顶部图标
  if (currentScrollTop > clientHeight) {
    isShow.value = true
  } else {
    isShow.value = false
  }
}

// 返回顶部
const goBack = () => {
  window.scrollTo({ top: 0, behavior: 'smooth' })
}

onMounted(() => {
  window.addEventListener('scroll', getScrollTop)
})
</script>

<style scoped>
/* 返回顶部样式 */
.scrollBox {
  position: fixed;
  right: 10px;
  bottom: 20px;
  z-index: 99;
}
</style>

一些方法的解释:

  • document.documentElement.clientHeight

    • 这是文档的根元素(即 <html> 元素)的可视高度。它表示浏览器窗口的视口高度,不包括滚动条的高度。对于大多数现代浏览器,这个值等于视口的高度。
  • document.body.clientHeight

    • 这是文档的 <body> 元素的可视高度。它同样表示浏览器窗口的视口高度,不包括滚动条的高度。在绝大多数情况下,这个值应该与 document.documentElement.clientHeight 相同。
  • window.scrollY

    • 这是窗口在垂直方向上滚动的距离。它表示从文档顶部到当前视口顶部的滚动距离。如果页面没有滚动,则这个值为 0。如果页面滚动了一段距离,这个值将显示滚动的像素数。

标签:返回,const,顶部,clientHeight,视口,Vue3,滚动,document
From: https://blog.csdn.net/qq_42371932/article/details/140766710

相关文章

  • Vue3 - 最新详细实现安装使用 Google 谷歌地图教程,提供搜索城市名称及地点(搜索关键字
    前言如果您需要Vue2版本,请访问这篇文章。在vue3|nuxt3网站开发中,详解实现接入谷歌google地图申请密钥及相关配置完整流程,附带使用谷歌地图相关功能示例代码,支持地图渲染展示、在地图上标点、全球地图搜索及搜索框相关联想关键词、地图导航、用户当前位置经纬度......
  • vue js事件方法调用api并返回值
    //确认confirm(id){if(this.isEdit&&this.form.list!==undefined&&this.form.list.length<=0){this.$notify({title:'表身为空时不能确认',type:'error'})}else{this.confirmLoading=trueinCo......
  • 70%的人都答错了的面试题,vue3的ref是如何实现响应式的?
    前言最近在我的vue源码交流群有位面试官分享了一道他的面试题:vue3的ref是如何实现响应式的?下面有不少小伙伴回答的是Proxy,其实这些小伙伴只回答对了一半。当ref接收的是一个对象时确实是依靠Proxy去实现响应式的。但是ref还可以接收 string、number 或 boolean 这样的......
  • 当 API 返回无交易时,如何检索特定 Cosmos 地址的交易数据?
    我正在尝试使用Python和aiohttp检索Cosmos区块链上特定地址的交易数据。该地址在Mintscan上显示有61笔交易,但在查询区块链的API时,它没有返回任何交易。这是我当前的代码:importaiohttpimportasyncioasyncdeffetch_transactions_for_address(node_url,addres......
  • Vue3 实现国际化
    什么是前端国际化?国际化是做框架,帮助快速实施本地化。框架的设计实现决定了进行本地化的效率与质量。那什么是本地化?本地化就是在特定语言文化下,使产品能服务当地客户的使用习惯,总的来说,就是为一个系统提供不同语言的切换。国际化实现原理我们需要提供不同语言的资源包......
  • 前端如何处理后端一次性返回10万条数据?
    在前端开发中,我们经常需要处理后端返回的大量数据。假设后端一次性返回10万条数据,直接在浏览器中处理和展示这些数据会导致性能问题,比如页面卡顿、内存占用过高等。本文将结合Vue项目实战,介绍如何有效地处理和展示大数据集的方法。1.后端数据处理首先,确保后端在传输数据时是经......
  • 前端如何处理后端一次性返回10万条数据?---02
    该方法和前面方法大致相同,主要通过分页加载、虚拟滚动和数据缓存1.后端数据处理首先,确保后端在传输数据时是经过压缩的,可以大大减少传输的数据量。常见的压缩方式有Gzip或Brotli。//例如,在Node.js中使用compression中间件constcompression=require('compression');cons......
  • 当 Visual Studio 检测到代码没有问题时,无法弄清楚为什么它返回“语法错误”
    fromkivy.appimportAppfromkivy.uix.gridlayoutimportGridLayoutfromkivy.uix.labelimportLabelclasstest(App):defbuild(self):self.window=GridLayout()self.label=Label(text="hello")self.window.add_widge......
  • 为什么不能基于返回类型进行重载
    函数重载(FunctionOverloading)是面向对象编程(尤其在C++、Java等语言中)中的一个重要特性,它允许在同一个作用域内定义多个同名函数,只要这些函数的参数列表(参数的数量、类型、顺序)不同即可。函数重载具有其独特的优点和缺点,以下是对这些方面的概述:优点代码清晰:通过函数重载,可以......
  • Temperatures()函数中用const创建温度转换中使用的变量.在main()函数中使用一个循环让
    /编写一个程序,要求用户输入一个华氏温度。程序应读取double类型的值作为温度值,并把该值作为参数传递该一个用户自定义的函数Temperatures()。该函数计算摄氏温度和开氏温度,并以小数点后面两位数字的精度显示3种温度。要求使用不同的温度标签来表示这3个温度值。下面是华氏温度转......