提升用户体验之requestAnimationFrame实现前端动画

1)requestAnimationFrame是什么?
1.MDN官方解释

在这里插入图片描述

2.解析这段话:

1、那么浏览器重绘是指什么呢?
——大多数电脑的显示器刷新频率是60Hz,1000ms/60=16.66666667ms的时间刷新一次
2、重绘之前调用指定的回调函数更新动画?
——requestAnimationFrame 会把每一帧中的所有 DOM 操作集中起来,在一次重绘或回流中 紧跟随浏览器的刷新频率 去完成操作。

2)基础用法
<script setup>
let animationRef
const goStart = () => {const cb = () => {// 写入DOM 操作会在每一次浏览器刷新之前执行❤requestAnimationFrame(cb)}// 开启动画animationRef = requestAnimationFrame(cb)
}
const goEnd = () => {// 取消动画cancelAnimationFrame(animationRef)
}
</script>
3)requestAnimationFrame的优点
1.传统实现JS动画

通常情况下,实现动画能使用css实现的就使用css,不能的css实现的再使用JS实现。
我们实现JS动画,会使用setTimeout和setInterval。
而setTimeout和setInterval的使用是存在问题的,导致丢帧。

①间隔时间不好确定,前面也提到大多数电脑的显示器刷新频率是60Hz,1000ms/60,定时器的间隔时间设置过长或者过短都无法匹配上刷新频率,推荐的最佳循环间隔17ms。
②MDN指出定时器实际延长时间比设定值长一些。常见的几种情况,嵌套超时、非活动标签的超时、追踪型脚本的节流、超时延迟等…一个浏览器的线程队列中任务
这里就不过多赘述,可以到以下链接阅读 https://developer.mozilla.org/zh-CN/docs/Web/API/setTimeout
在这里插入图片描述

其实就是当线程忙碌时,定时器会等待线程队列中的任务执行后再执行。
所以定时器动画,视觉上看来,就是一盹一盹…的效果。

2.requestAnimationFrame

而requestAnimationFrame由浏览器专门为动画提供的 API,就是为了解决这类问题,提升用户体验的。
且我们切换到其他页面时,requestAnimationFrame会暂停下来,直到我们回到该页面后,动画会从暂停的位置继续执行。

3.应用场景

在这里插入图片描述
会用一定卡顿,可以到我的github下载代码运行看效果。
https://github.com/lssChaseDream/tao-vue3/tree/release240625

<template><div class="btn"><el-button @click="goStart">开始</el-button><el-button @click="goEnd">停止</el-button></div><div class="a-box">定时器</div><div class="b-box">requestAnimationFrame</div>
</template>
<script setup>
import { ref } from 'vue'
let leftNum = ref(0)
let flag = ref(false) // 定时器动画停止标识
let timmer // 定时器
let animationRef // requestAnimationFrame存储
// 定时器动画事件
const goAStart = () => {let dom = document.getElementsByClassName('a-box')dom[0].style.width = '10px'timmer = setInterval(() => {leftNum.value = parseInt(dom[0].style.width)if (leftNum.value > 800 || flag.value) {clearInterval(timmer)} else {dom[0].style.width = (leftNum.value + 3) + 'px'console.log(dom[0].style.width);}}, 17);
}
const goAEnd = () => {clearInterval(timmer)
}
// requestAnimationFrame动画事件
const goBStart = () => {let dom = document.getElementsByClassName('b-box')dom[0].style.width = '10px'const cb = () => {leftNum.value = parseInt(dom[0].style.width)if (leftNum.value > 800) {} else {dom[0].style.width = (leftNum.value + 3) + 'px'console.log(dom[0].style.width);animationRef = requestAnimationFrame(cb)}}requestAnimationFrame(cb)
}
const goBEnd = () => {cancelAnimationFrame(animationRef)
}const goEnd = () => {goAEnd()goBEnd()
}
const goStart = () => {goAStart()goBStart()
}
</script><style scoped lang="scss">
.btn {text-align: center;margin-bottom: 20px;
}.a-box {width: 20px;height: 80px;background-color: pink;position: absolute;
}.b-box {width: 20px;height: 80px;background-color: blueviolet;color: #fff;position: absolute;top: 120px;
}
</style>
4)requestAnimationFrame兼容性

对比

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

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

相关文章

六西格玛绿带培训ROI:你的投资究竟值不值?

近年来&#xff0c;企业对于员工培训的投入日益增加&#xff0c;六西格玛绿带培训更是作为提升企业运营效率和质量管理的利器&#xff0c;更是备受关注。然而&#xff0c;面对高昂的培训成本&#xff0c;企业如何评估六西格玛绿带培训的投资回报率&#xff08;ROI&#xff09;呢…

安装Intel Realsense D435i驱动与ROS包报错

1.下载安装realsense SDK 1.1 安装依赖 sudo apt install libudev-dev pkg-config libgtk-3-dev sudo apt install libusb-1.0-0-dev pkg-config sudo apt install libglfw3-dev sudo apt install libssl-dev1.2 权限 cd librealsense/ sudo cp config/99-realsense-libusb.…

一万年太久,只争朝夕 | Foundation model的进展仍不够快

编者按&#xff1a;如今根基模型&#xff08;Foundation Models&#xff09;的应用和相关创新正在快速涌现&#xff0c;但仍有很大的提升空间&#xff0c;目前还无法充分发挥根基模型的潜能、将其高效快速地应用于企业级AI应用中。 根基模型的加速应用和落地&#xff0c;带动了…

64、基于去噪卷积神经网络的彩色图像去噪(matlab)

1、基于去噪卷积神经网络的彩色图像去噪的原理及流程 基于去噪卷积神经网络的彩色图像去噪是一种基于深度学习的图像处理技术&#xff0c;可以有效地去除图像中的噪声&#xff0c;提高图像的质量。下面是在Matlab中实现基于去噪卷积神经网络的彩色图像去噪的原理及流程&#x…

移动端响应式布局开发的四大方案

移动端响应式布局开发的四大方案 media媒体查询remflexvh/vw media媒体查询 媒体查询通常会结合百分比实现自适应&#xff0c;它经常应用于pc端与移动端是一套项目代码的情况&#xff0c;依据媒体查询写多套不同的样式 rem pc端和移动端是两套代码的&#xff0c;通常pc端不做…

ChatGPT如何应用在谷歌seo?

ChatGPT在提升博客和创作效率方面非常有用。它可以帮助你快速生成吸引人的标题&#xff0c;确保内容第一眼就能抓住读者的注意力。不仅如此&#xff0c;ChatGPT还能根据你的主题生成详细的文章提纲&#xff0c;让你在写作时思路更加清晰。关键词优化也是它的强项&#xff0c;可…

300KG载重履带式无人车技术详解

一、动力系统 300KG载重履带式无人车采用了高效且稳定的动力系统&#xff0c;通常由电池组或燃油发动机作为动力源。电池组提供了较长的续航时间和较低的运行噪音&#xff0c;适用于需要静音作业的场合。而燃油发动机则能提供更高的功率和续航能力&#xff0c;适用于需要长时间…

上海市计算机学会竞赛平台2023年3月月赛丙组选取子段

题目描述 给定一个长度为&#x1d45b;n的序列 &#x1d44e;1,&#x1d44e;2,...,&#x1d44e;&#x1d45b;a1​,a2​,...,an​ &#xff0c;请问多少种方案&#xff0c;能够从中选取一个长度恰好为 &#x1d45a;m 的子段&#xff0c;且子段内所有数字的最大值不超过&…

Vue2 基础九电商后台管理项目——下

代码下载 打包发布服务代码下载 项目优化 生成打包报告&#xff0c;根据报告优化项目第三方库启用CDNElement-UI组件按需加载路由懒加载首页内容定制 添加进度条 给项目添加进度条效果&#xff0c;先打开项目控制台&#xff0c;打开依赖&#xff0c;安装 nprogress 打开ma…

STM32远程烧录程序

目录 简介 不同的程序下载方式 ICP&#xff1a;In-Circuit Programming ISP&#xff1a;In-System Programing IAP&#xff1a;In-Application Programming BootLoader Bootloader 是什么&#xff1f; STM32的启动方式 存储器组织 存储器映像 嵌入式SRAM 嵌入式FL…

不同行业如何选择适合自己行业的项目管理工具?

在当今的信息化时代&#xff0c;项目管理软件已成为各行各业不可或缺的工具。然而&#xff0c;由于各行业具有不同的特点和需求&#xff0c;因此选择合适的项目管理软件成为了一个重要问题。本文将探讨不同行业在选择项目管理软件时需要考虑的因素&#xff0c;希望能帮助大家更…

vue实现一个简单的审批绘制功能

1、vue代码 <div class"approval"><div class"approval_ul" v-for"(item,key) in approvalList" :key"key"><div><el-radio-group v-model"item.jointlySign"><el-radio label"1">…

【超全详解】耳机怎么清理?手把手教你清洁各种耳机!

平时听歌、听书、打电话耳机往往有时候几个小时都戴着&#xff0c;时间久了难免会堆积污垢堵孔。这可能就会造成耳机左右音量不一致、声音小、降噪效果变差、嗡嗡声等问题&#xff0c; 而且耳机用久了如果不及时清理&#xff0c;可能导致耳朵感染细菌&#xff0c;严重的话会影响…

学习React hook API

React hook API useEffect&#xff08;异步执行&#xff09;useLayoutEffect&#xff08;同步执行&#xff09; useEffect&#xff08;异步执行&#xff09; useEffect: 是在浏览器完成绘制后异步执行的; 所以如果你在 useEffect 中改变了 DOM&#xff0c;可能会造成用户看到的…

使用Random.next生成随机数

使用Random.next生成随机数 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨在Java中如何使用 Random.next 方法生成随机数。随机数在编程中应用广…

谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?(jvm)

Java 虚拟机&#xff08;JVM&#xff09;在运行时将内存划分为多个区域&#xff0c;以便有效管理和分配内存资源。这些内存区域包括堆&#xff08;Heap&#xff09;、方法区&#xff08;Method Area&#xff09;、程序计数器&#xff08;Program Counter Register&#xff09;、…

计算机大方向的就业选择

选专业要了解自己的兴趣所在。 即想要学习什么样的专业&#xff0c;如果有明确的专业意向&#xff0c;就可以有针对性地选择那些专业实力较强的院校。 2.如果没有明确的专业意向&#xff0c;可以优先考虑一下院校。 确定一下自己想要选择综合性院校还是理工类院校或是像财经或者…

亚马逊测评策略全攻略:详析各方案优势与局限,你精通了吗?

亚马逊测评&#xff0c;一个绕不开的话题。不管是对于新手卖家还是资深卖家来说&#xff0c;它都是提升产品销量和排名的有效手段之一。接下来&#xff0c;我将为大家详细解析亚马逊测评的各种方式和注意事项。 一、精准筛选真人测评资源 在寻找真人测评资源时&#xff0c;许多…

难道 Java 已经过时了?

当一门技术已经存在许多年了&#xff0c;它可能会失去竞争力&#xff0c;而后黯然退场&#xff0c;默默地离开&#xff0c;这对大部分的人来说就已经算是过时了。 Java 于 1995 年正式上线&#xff0c;至今已经走过了 27 个年头&#xff0c;在众多编程技术里算是年龄比较大的语…

数据结构----栈和队列之队列的实现

目录 1.基本概况 2.队列组成 3.队列的实现 &#xff08;1&#xff09;队列的初始化 &#xff08;2&#xff09;队列的销毁 &#xff08;3&#xff09;队列的尾插 &#xff08;4&#xff09;队列的头删 &#xff08;5&#xff09;队列的判空 &#xff08;6&#xff09;队…