vue 封装返回顶部组件 -凯发k8官方网
我的环境是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:
ps:解释一下 window.requestanimationframe(callback) 方法
查了很多,很多让人费解的解释,看的我一头雾水,越看越糊涂。
官方是这样解释的:
window.requestanimationframe() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行;
注意:若你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用window.requestanimationframe();
当你准备更新动画时你应该调用此方法。这将使浏览器在下一次重绘之前调用你传入给该方法的动画函数(即你的回调函数)。回调函数执行次数通常是每秒60次,但在大多数遵循w3c建议的浏览器中,回调函数执行次数通常与浏览器屏幕刷新次数相匹配。为了提高性能和电池寿命,因此在大多数浏览器里,当requestanimationframe() 运行在后台标签页或者隐藏的 里时,requestanimationframe() 会被暂停调用以提升性能和电池寿命;
回调函数会被传入domhighrestimestamp参数,domhighrestimestamp指示当前被 requestanimationframe() 排序的回调函数被触发的时间。在同一个帧中的多个回调函数,它们每一个都会接受到一个相同的时间戳,即使在计算上一个回调函数的工作负载期间已经消耗了一些时间。该时间戳是一个十进制数,单位毫秒,最小精度为1ms(1000μs)。
自我感觉:window.requestanimationframe(callback),对回调函数的执行时机的一个优化。在需要对动画循环调用时,可以替代定时器,解决定时器会卡顿的问题。
更多看这篇博客:requestanimationframe
总结
以上是凯发k8官方网为你收集整理的vue 封装返回顶部组件的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: vue these dependenci