我的环境是vue+vant+ts, 相信大家应该知道怎么改成vue+js的写法

先看效果图:

HTML:

<template><!-- 返回顶部组件 2020-02-17 Walker --><div class="backtop"><div v-if="btnFlag" @click="backTop" class="my_gotop"><!-- 图标 svg --><svgt="1581926628181"class="icon"viewBox="0 0 1024 1024"version="1.1"xmlns="http://www.w3.org/2000/svg"p-id="4136"width="50"height="50"><pathd="M512 0C230.4 0 0 230.4 0 512s230.4 512 512 512 512-230.4 512-512S793.6 0 512 0zM697.6 582.4 627.2 582.4c-12.8 0-19.2 6.4-19.2 19.2l0 108.8c0 6.4-6.4 12.8-12.8 12.8L428.8 723.2c-6.4 0-12.8-6.4-12.8-12.8L416 595.2c0-6.4-6.4-19.2-19.2-19.2L326.4 576C320 582.4 320 576 320 576l179.2-172.8c6.4-6.4 12.8-6.4 19.2 0L704 576C704 576 704 582.4 697.6 582.4zM704 364.8 320 364.8c-19.2 0-32-12.8-32-32S300.8 300.8 320 300.8l384 0c19.2 0 32 12.8 32 32S723.2 364.8 704 364.8z"p-id="4137"fill="#2375ff"></path></svg></div></div>
</template>

TS:

<script lang="ts">
import { Component, Vue } from "vue-property-decorator";@Component
export default class EMBackTop extends Vue {//是否显示组件btnFlag = false;/*** @description 返回顶部的函数*/backTop() {const scrollTopObj =document.documentElement.scrollTop || document.body.scrollTop;if (scrollTopObj > 0) {//回调 backtop()函数 直到不符合条件window.requestAnimationFrame(this.backTop);// 滚动动画效果 动画没执行完之前继续滑动屏幕会有点bugwindow.scrollTo(0, scrollTopObj - scrollTopObj / 8);// 没有动画效果方式  这种方式可以不调用requestAnimationFrame();//window.scrollTo(0, 0);}}/*** @description 是否显示组件的函数*/showBackTop() {const scrollTopObj =document.documentElement.scrollTop || document.body.scrollTop;if (scrollTopObj > 0) {this.btnFlag = true;} else {this.btnFlag = false;}}mounted() {// 监听距顶部的距离 调用showBackTop()window.addEventListener("scroll", this.showBackTop, true);}destroyed() {window.removeEventListener("scroll", this.showBackTop, true);}
}
</script>

Css:

<style scoped lang="less">
.my_gotop {position: fixed;bottom: 2rem;right: 2rem;
}
</style>

ps:解释一下 window.requestAnimationFrame(callback) 方法
查了很多,很多让人费解的解释,看的我一头雾水,越看越糊涂。
官方是这样解释的:

window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行;

注意:若你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用window.requestAnimationFrame();
当你准备更新动画时你应该调用此方法。这将使浏览器在下一次重绘之前调用你传入给该方法的动画函数(即你的回调函数)。回调函数执行次数通常是每秒60次,但在大多数遵循W3C建议的浏览器中,回调函数执行次数通常与浏览器屏幕刷新次数相匹配。为了提高性能和电池寿命,因此在大多数浏览器里,当requestAnimationFrame() 运行在后台标签页或者隐藏的 里时,requestAnimationFrame() 会被暂停调用以提升性能和电池寿命;
回调函数会被传入DOMHighResTimeStamp参数,DOMHighResTimeStamp指示当前被 requestAnimationFrame() 排序的回调函数被触发的时间。在同一个帧中的多个回调函数,它们每一个都会接受到一个相同的时间戳,即使在计算上一个回调函数的工作负载期间已经消耗了一些时间。该时间戳是一个十进制数,单位毫秒,最小精度为1ms(1000μs)。

自我感觉:window.requestAnimationFrame(callback),对回调函数的执行时机的一个优化。在需要对动画循环调用时,可以替代定时器,解决定时器会卡顿的问题。

更多看这篇博客:requestAnimationFrame

vue 封装返回顶部组件相关推荐

  1. vite + vue3 + 封装axios + 封装loading + 封装返回顶部

    前言 ​前期回顾    ​ vite + vue3 + ts配置<企业级项目>二次封装el-table.分页_0.活在风浪里的博客-CSDN博客封装的功能有哪些?分页.表格排序.文字居中. ...

  2. vue3返回顶部组件(丝滑)

    vue3返回顶部组件(丝滑) 我这里使用了阿里的字体图标,需要自己配置一下 <template><div v-if="btnShow" style="p ...

  3. Vue封装树形菜单组件

    csdn终于更新完成了哈,ok,步入正题 像这种树形结构的核心思想就是:递归思想,知道使用递归,其实这个例子函数的封装也就很简单喽 实现步骤: 设置的props:                    ...

  4. vue封装自己的组件库 02.封装dialog组件

    link: https://blog.csdn.net/weixiaowei_2016/article/details/104702793 四.封装一个element-ui风格的dialog组件 前置 ...

  5. vue封装一个日历组件

    图示 封装的组件的代码如下 <template><div class="calendar"><!-- 选择日历的弹出层 --><div c ...

  6. 原生js实现简洁的返回顶部组件

    https://www.cnblogs.com/lyzg/archive/2016/03/15/5281690.html 添加返回到顶部按钮 转载于:https://www.cnblogs.com/y ...

  7. 从 0 到 1 用 Vue 封装一个日历组件

    写在前面 双手奉上代码链接: 传送门 - ajun568(https://github.com/ajun568/vue-calendar),点击文末阅读原文直达 双脚奉上最终效果图: 需求分析 需求分 ...

  8. vue封装一个弹幕组件

    说在前面

  9. 手机端html返回顶部,vue实现移动端返回顶部

    本文实例为大家分享了vue实现移动端返回顶部的具体代码,供大家参考,具体内容如下 HTML: 1 ▲ JS: export default { data() { return { isShow: tr ...

最新文章

  1. usaco Cowxor (trie 树)
  2. Qt实现拖动一个lineEdit同时拖动mainwindow
  3. coffeeScript学习01
  4. [CQOI2018] 解锁屏幕(状压dp)
  5. 7-40 最大的数 (10 分)
  6. 这个“十一”长假,你是背“锅”出行吗?
  7. 雪碧+滑动门,自适应宽度菜单
  8. arm的bin二进制代码分析
  9. Linux中如何让进程在后台运行
  10. VelocityTracker使用总结
  11. 【wpa_supplicant】入门 eloop 机制
  12. WhatsApp Botim 筛号,筛选群发消息,WhatsApp、Botim协议
  13. [Hadoop培训笔记]07-HDFS详细分析三
  14. find函数的使用方法Matlab,matlab中find函数的使用说明——emily语法介绍
  15. 打开和设置IDEA欢迎界面
  16. 神来之笔,阿里最新Spring Security源码手册牵动了多少人的心,拿走不谢
  17. css拉伸动画,CSS3 matrix双板划水、拉伸、打板动画实例animation
  18. 2017年中兴算法大赛 迪杰特斯拉派
  19. js中的==和===
  20. uniapp之导航栏设置和沉浸式的解决方法

热门文章

  1. 【python】路径前添加 r表示不转义
  2. Java进阶高级程序员必备:深入浅出springboot+深入Java虚拟机
  3. go使用反射reflect获取变量类型
  4. vue.directive自定义指令 vue.set使用示例
  5. k8s安装kubesphere的环境准备:资源规划、默认存储类StorageClass(nfs-client-provisioner)
  6. jvm调优:何为垃圾及与c++的对比
  7. Scala控制抽象:将一段代码作为参数传递给高阶函数去执行
  8. Python Django URL传参代码示例
  9. redis sorted_set数据类型常用命令及跳表skip_list原理
  10. git commit或者pull代码时提示代码冲突解决方法