## 七、window.requestAnimationFrame()
有一些JavaScript方法可以调节重新渲染,大幅提高网页性能。
其中最重要的,就是 window.requestAnimationFrame() 方法。它可以将某些代码放到下一次重新渲染时执行。
~~~
function doubleHeight(element) {
var currentHeight = element.clientHeight;
element.style.height = (currentHeight * 2) + 'px';
}
elements.forEach(doubleHeight);
~~~
上面的代码使用循环操作,将每个元素的高度都增加一倍。可是,每次循环都是,读操作后面跟着一个写操作。这会在短时间内触发大量的重新渲染,显然对于网页性能很不利。
我们可以使用`window.requestAnimationFrame()`,让读操作和写操作分离,把所有的写操作放到下一次重新渲染。
~~~
function doubleHeight(element) {
var currentHeight = element.clientHeight;
window.requestAnimationFrame(function () {
element.style.height = (currentHeight * 2) + 'px';
});
}
elements.forEach(doubleHeight);
~~~
页面滚动事件(scroll)的监听函数,就很适合用 window.requestAnimationFrame() ,推迟到下一次重新渲染。
~~~
$(window).on('scroll', function() {
window.requestAnimationFrame(scrollHandler);
});
~~~
当然,最适用的场合还是网页动画。下面是一个旋转动画的例子,元素每一帧旋转1度。
~~~
var rAF = window.requestAnimationFrame;
var degrees = 0;
function update() {
div.style.transform = "rotate(" + degrees + "deg)";
console.log('updated to degrees ' + degrees);
degrees = degrees + 1;
rAF(update);
}
rAF(update);
~~~