网站首页 > 技术文章 正文
requestAnimationFrame 是一个很好的方法来创建平滑的动画,不管在什么设备或浏览器上。它能够保证在每一次重绘(repaint)或重排(reflow)前执行代码,使得动画能够在浏览器的刷新率下流畅运行。
当你使用 requestAnimationFrame 创建动画时,如果浏览器的窗口处于非活动状态,或者用户切换到了另一个标签,那么 requestAnimationFrame 请求的回调函数将会被推迟到下一次浏览器渲染时执行,这样可以避免不必要的计算和绘制,从而节省资源和电量。
这是一个简单的 requestAnimationFrame 的使用例子:
var start = null;
function step(timestamp) {
if (!start) start = timestamp;
var progress = timestamp - start;
var element = document.getElementById('my-element');
element.style.left = Math.min(progress / 10, 200) + 'px';
if (progress < 2000) {
window.requestAnimationFrame(step);
}
}
window.requestAnimationFrame(step);
在这个例子中,step 函数在每一帧被调用时都会更新一个元素的 left 属性,使得元素在 2 秒内移动 200px。如果在 2 秒内没有完成动画,那么 requestAnimationFrame 将不会继续请求新的帧,因此动画将会在 2 秒后停止。
然而,即使使用了 requestAnimationFrame,动画仍然可能在某些情况下卡顿。这可能是因为你的代码在每一帧中执行了大量的计算或者进行了复杂的 DOM 操作。在这种情况下,你可以考虑使用一些优化技术,比如使用 requestIdleCallback 来在浏览器空闲时执行动画,或者使用 requestAnimationFrame 的替代品,如 MutationObserver 或 scroll 或 resize 事件,这些事件在浏览器进行重绘或重排时也会触发。
*** 如果您从这篇文章得到帮助或受到启发,请动动小手指帮我点个赞,您的举手之劳也许会助我健康成长!谢谢!***
猜你喜欢
- 2024-11-12 一图看懂 Python 2 / Python 3 编码 | CSDN 博文精选
- 2024-11-12 面试官:“看你简历上写熟悉Handler机制,那聊聊IdleHandler吧”
- 2024-11-12 如何做好分布式任务调度——Scheduler 的一些探索
- 2024-11-12 Handler都没搞懂,拿什么去跳槽啊?
- 2024-11-12 面试官:“IdleHandler 有什么用?怎么用?”
- 2024-11-12 react源码之 react-fiber 详解 react高级教程
- 2024-11-12 React 性能优化 | 包括原理、技巧、Demo、工具使用
- 2024-11-12 SSR岛屿Islands架构为什么重要 岛屿数据
- 2024-11-12 同行越做越复杂,聊聊我们简化版Twitter的架构:仅原生版3%大小
- 2024-11-12 前端大佬谈 React Fiber 架构 前端react框架的前景
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-