在JS中,我们可以使用 setTimeout
和 setIntarval
实现动画,但是 H5 的出现,让我们又多了两种实现动画的方式,分别是 CSS 动画(transition
、animation
)和 H5的canvas
实现。除此以外,H5还提供了一个专门用于请求动画的API,让 DOM 动画、canvas动画、svg动画、webGL动画等有一个专门的刷新机制。
1. 是什么
requestAnimationFrame
方法会告诉浏览器希望执行动画并请求浏览器在下一次重绘之前调用回调函数来更新动画。
window.requestAnimationFrame(callback)
- callback:下一次重绘之前更新动画帧所调用的函数,callback仅有一个参数,为DOMHighResTimeStamp参数,表示requestAnimationFrame()开始执行回调函数的时刻。
- 返回值:一个 long 类型整数,唯一标志元组在列表中的位置,你可以传这个值给
cancelAnimationFrame()
以取消动画。
在使用和实现上, requestAnimationFrame
与 setTimeout
类似。举个例子:
let count = 0;
let rafId = null;
/**
* 回调函数
* @param time requestAnimationFrame 调用该函数时,自动传入的一个时间
*/
function requestAnimation(time) {
console.log(time); // 打印执行requestAnimation函数的时刻
// 动画没有执行完,则递归渲染
if (count < 5) {
count++;
// 渲染下一帧
rafId = window.requestAnimationFrame(requestAnimation);
}
}
// 渲染第一帧
window.requestAnimationFrame