HTML5中的 requestAnimationFrame

HTML5中的 requestAnimationFrame

在mdn中,是这么讲的:
window.requestAnimationFrame() 方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画。该方法使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用。如果你想做逐帧动画的时候,你应该用这个方法。这就要求你的动画函数执行会先于浏览器重绘动作。通常来说,被调用的频率是每秒60次,但是一般会遵循W3C标准规定的频率。如果是后台标签页面,重绘频率则会大大降低。

说了这么多,其实调用方法很简单,就是
window.requestAnimationFrame(callback);

传入一个回调函数就可以了
比如我们在下面

1
<div id="block" class="block"></div>

1
2
3
4
5
6
7
8
9
10
11
var ele = document.getElementById('block');
var width = 100;
function animate(time) {
width ++;
ele.style.width = width + 'px';
ele.innerHTML = width;
if(width < 1000){
requestAnimationFrame(animate)
}
}
requestAnimationFrame(animate);

对脚本中定义一个回调函数animate, 然后依次的增加with变量,然后在回调中继续调用,这样就能实现每个frame的刷新,现在回过头看,requestAnimationFrame, 字面意义,就是实现逐帧的动画嘛,但是和定时器不同的是,它会和浏览器重绘的频率保持一致,因此比定时器更加流畅~~~