参考答案:
window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行。
与setTimeout相比,requestAnimationFrame最大的优势是由系统来决定回调函数的执行时机。具体一点讲,如果屏幕刷新率是60Hz,那么回调函数就每16.7ms被执行一次,如果刷新率是75Hz,那么这个时间间隔就变成了1000/75=13.3ms,换句话说就是,requestAnimationFrame的步伐跟着系统的刷新步伐走。它能保证回调函数在屏幕每一次的刷新间隔中只被执行一次,这样就不会引起丢帧现象,也不会导致动画出现卡顿的问题。
这个API的调用很简单,如下所示:
1const element = document.getElementById('some-element-you-want-to-animate'); 2let start; 3 4function step(timestamp) { 5 if (start === undefined) 6 start = timestamp; 7 const elapsed = timestamp - start; 8 9 //这里使用`Math.min()`确保元素刚好停在200px的位置。 10 element.style.transform = 'translateX(' + Math.min(0.1 * elapsed, 200) + 'px)'; 11 12 if (elapsed < 2000) { // 在两秒后停止动画 13 window.requestAnimationFrame(step); 14 } 15} 16 17window.requestAnimationFrame(step);
除此之外,requestAnimationFrame还有以下两个优势:
最近更新时间:2024-08-10