我正在尝试使用requestAnimationFrame
,但在除了Chrome以外的任何其他浏览器中都得到了非常卡顿的动画。
我创建了一个像这样的对象:
var object = function() {
var lastrender = (new Date()).getTime();
var delta = 0;
return {
update: function() {
//do updates using delta value in calculations.
},
loop: function() {
var looptimestamp = (new Date()).getTime();
delta = looptimestamp - lastrender;
lastrender = looptimestamp;
this.update();
window.requestAnimationFrame(this.loop.bind(this));
}
};
}
现在我只是在画布元素上绘制一个矩形,并将其移动。这是处理器上非常轻量级的操作。在Chrome中,它运行得非常流畅,当我在控制台记录delta值时,它几乎始终保持在约17左右。然而,如果我在Firefox或Safari中执行相同的操作,则会得到以下delta值:
17-3-17-2-32-34-32-31-19-31-17-3-0-14-3-14-35-31-16-3-17-2 ... and so on
看起来浏览器与显示屏之间的同步不太好,除了Chrome之外,在所有其他情况下,使用旧的setTimeout方法并将目标超时设置为16ms可以获得更平滑的动画。
有人知道是否可能在除Chrome之外的浏览器中使用requestAnimationFrame获得更平滑的动画吗?有人在Firefox中成功获得比上面发布的更稳定的delta值吗?
object.update()
中的代码吗?您可能会导致大量重排,这会影响性能。通常您可以使用Chrome开发者工具中的时间轴来查找是什么导致了拖慢效果。 - doug65536