返回顶部按钮的组件

news/2025/3/17 22:45:37/文章来源:https://www.cnblogs.com/lushuang55/p/18232857

目录
  • 1.封装
  • 2.调用
  • 3.效果

1.封装

<template><transition :name="transitionName"><div v-show="visible" class="back-to-ceiling" @click="backToTop"><svg width="16" height="16" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg"class="Icon Icon--backToTopArrow" aria-hidden="true" style="height:16px;width:16px"><pathd="M12.036 15.59a1 1 0 0 1-.997.995H5.032a.996.996 0 0 1-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29a1.003 1.003 0 0 1 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z" /></svg></div></transition>
</template><script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue'
const backPosition = ref(0);//按钮回到顶部的位置
const transitionName = ref('fade');
const visibilityHeight = ref(400);//显示按钮的高度const visible = ref(false)//控制按钮的显示与隐藏
let interval = null//动画效果
let isMoving = falseconst handleScroll = () => {//监听页面滚动事件// 当前页面的滚动距离大于props.visibilityHeight:400时就visible设置为true,组件显示visible.value = window.pageYOffset > visibilityHeight.value
}const backToTop = () => {//返回顶部的动画效果if (isMoving) return//如果为true,说明正在执行滚动动画,因此直接返回,不执行后续操作。const start = window.pageYOffset//动画的起始位置let i = 0//初始化计数器isMoving = true//开始执行滚动动画interval = setInterval(() => {//设置一个定时器,每16.7毫秒执行一次回调函数//使用 easeInOutQuad 二次缓动函数计算下一个要滚动位置 nextconst next = Math.floor(easeInOutQuad(10 * i, start, -start, 500))if (next <= backPosition.value) {//滚动到目标位置顶部了window.scrollTo(0, backPosition.value)clearInterval(interval)//清除定时器isMoving = false//动画结束} else {//没滚到目标位置,继续往下一个next位置滚动window.scrollTo(0, next)}i++}, 16.7)
}const easeInOutQuad = (t, b, c, d) => {//t: 当前时间、b: 起始值、c: 变化量、d: 持续时间if ((t /= d / 2) < 1) return (c / 2) * t * t + b//动画的前半部分,加速return (-c / 2) * (--t * (t - 2) - 1) + b//动画的后半部分,减速
}onMounted(() => {//组件挂载时添加滚动事件监听。window.addEventListener('scroll', handleScroll)
})onBeforeUnmount(() => {//在组件销毁前执行,用于移除滚动事件监听并清除定时器。window.removeEventListener('scroll', handleScroll)if (interval) {clearInterval(interval)}
})</script><style scoped>
.back-to-ceiling {position: fixed;display: inline-block;text-align: center;cursor: pointer;right: 50px;bottom: 50px;width: 40px;height: 40px;border-radius: 4px;line-height: 45px;background: #e7eaf1;
}.back-to-ceiling:hover {background: #d5dbe7;
}.fade-enter-active,
.fade-leave-active {transition: opacity 0.5s;
}.fade-enter,
.fade-leave-to {opacity: 0;
}.back-to-ceiling .Icon {fill: #9aaabf;background: none;
}
</style>

2.调用

<template><el-tooltip placement="top" content="tooltip"><back-to-top class="myBackToTopStyle" :visibility-height="300" :back-position="50" transition-name="fade" /></el-tooltip>
</template>
<script setup lang="ts">
//引入组件
import BackToTop from '@/components/BackToTop/index.vue'
</script><style scoped>
.myBackToTopStyle {right: '50px';bottom: '50px';width: '40px';height: '40px';border-radius: '4px';line-height: '45px';background: '#e7eaf1';
}
</style>

3.效果

  • 滚动超过400出现回到顶部按钮,点击按钮回到顶部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720306.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c函数堆栈

使用反汇编分析代码 1.无参数无返回值 void fun1() {}int main(int argc, char* argv[]) {fun1();return 0; }反汇编分析2.有参无返回值 代码 void fun2(int x,int y) {x + y; }int main(int argc, char* argv[]) {fun2(1,2);return 0; }返汇编分析3.无参有返回值 代码 int fun…

14-ShardingSphere的分布式主键实现

1 ShardingSphere自动生成键 MySQL自增键、Oracle自增序列等。分片场景下问题就复杂了,不能依靠单实例上的自增键来实现不同数据节点之间的全局唯一主键,分布式主键的需求应运而生。ShardingSphere 作为一款优秀分库分表开源软件,同样提供分布式主键实现机制。 1.1 Generate…

Mesh快连

Mesh快连一、名词解释 Mesh快连是一种由多个节点组成的网络系统,这些节点可以相互连接,形成一个“网状”的结构。二、如何使用有线Mesh: 网络拓扑:设备版本:3.7.12企业版。 配置要求:从设备需恢复默认配置。 拓扑说明:设备接入电源,Q6000作为主设备通过LAN口连接从设备…

【Unity】Vector3的方法

属性和方法 作用normalized 使用Vector3.normalized的一个常见场景是在物理模拟中,比如计算速度向量或在射线投射(Raycasting)中确定射线的方向。Lerp Vector3.Lerp在Unity中非常常用,尤其是在动画和游戏逻辑中,用于平滑地过渡从一个状态到另一个状态,例如角色移动、颜色…

perfers-color-scheme 使用简单介绍

perfers-color-scheme 简介 prefers-color-scheme 媒体查询属性用于检测用户操作系统是否使用深色模式。 属性值dark 表示用户操作系统使用深色模式 light 表示用户操作系统使用浅色模式 no-preference 表示用户操作系统没有偏好,或者操作系统不支持该属性示例 @media (prefer…

正则表达式学习(1)——模式

正则表达式用于处理字符和字符串,是一种强大的工具 1. 正则表达式的模式字面值字符:例如字母、数字、空格等,可以直接匹配它们自身。特殊字符:例如点号 .、星号 *、加号 +、问号 ? 等,它们具有特殊的含义和功能。字符类:用方括号 [ ] 包围的字符集合,用于匹配方括号内的…

修改软链接实现提权

在做 vulnhub bottleneck 靶机过程中,看到一个修改软链接实现提权或越权的小技巧,固记录一下 提权成功后,是 www-data 的权限,运行 sudo -l 发现系统中存在clear_logs ,可以让bytevsbyte 免密运行 尝试先把权限提升至 bytevsbyte 再考虑 提root查看 clear_logs 文件属性看…

Python数据类型转换(新)

目录Python数据类型的转换隐式类型转换显式类型转换 Python数据类型的转换 数据类型分为1.隐式类型转换 2.显式类型转换 隐式类型转换在隐式类型转换中,Python会自动将一种数据类型转换为另一种数据类型,不需要认为去干预比如在进行算术运算的时候,较低数据类型(整数)就会转换…

在modelsim中查找指定信号是否有特定值

先选中信号,然后在上方搜索框输入后按回车就可以搜索,搜索框右边分别为搜索上一个和搜索下一个。

Python2 input函数漏洞利用

在 Python2 中,input 函数相当于 eval(raw_input(prompt))如果输入的数据是一个恶意的表达式,存在任意代码执行的风险 实例演示字符串拼接命令执行__import__(os).system(cat /etc/passwd)靶场利用 在 vulnhub bottleneck 靶机中,遇到 input 漏洞利用的情况 # 核心代码forea…

Python3基本语法(新)

目录基本语法输出print()格式化输出标识符import关键字保留字(关键字)注释多行注释1、单引号()2、双引号(""")缩进空行同一行显示多条语句等待用户输入inputimport 与 from...import 基本语法 输出print() print() 是一个让计算机在屏幕上进行输出的指令.它…

Python数据类型(新)

目录数据类型类型查看同时多个变量赋值标准数据类型1.数字(Number)2.字符串3.bool(布尔类型)4.元组元组的运算+ 运算+=运算* 运算元组的删除5.列表(List)查找列表修改列表列表的切片列表是可以修改的列表的追加列表的插入列表的连接列表的删除列表的清空列表的复制6.字典查找字…