理解
requestAnimationFrame
就是利用浏览器屏幕的刷新率自己调用自己的一个方法,它的默认间隔就是屏幕刷新率的帧率,一般是60fps/s,当然对于性能差的设备它的刷新率是变化的
优点
requestAnimationFrame
会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时候间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧在隐藏或不可见的元素中,
requestAnimationFrame
将不会进行重绘或回流,这当然就意味着更少的的cpu,gpu和内存使用量
使用方法
requestAnimationFrame()
接收回调函数,返回idcancelAnimationFrame()
取消const el = document.getElementById("canvas-container");
let width = el.offsetWidth - 30;
const height = el.offsetHeight - 30;
const mycanvas = new MyCanvas("canvas-container", width, height);
const context = mycanvas.getContext();
/**
* 通过requestAnimationFrame实现高性能动画
*
* requestAnimationFrame可以把浏览器的重绘和回流放到一个队列,然后一起进行,可以使运行更加顺畅,也降低了CPU的压力
*/
let step = 1;
function run2() {
step += 10;
if ( step < 1000) {
requestAnimationFrame(run2);
}
setInterValAnimation(context, 100 + step, 100, 100, 20);
context.clearRect(step, 100, 100, 20);
}
// 第一帧渲染
let aaa = requestAnimationFrame(run2);
console.log(aaa);
使用场景
会频繁引起回流和重绘的操作中,例如
resize
- 循环动画中,例如地图的动态
marker
点等