所以目前我有一个弹跳对象的动画,该动画每秒播放20次
1000/50 = 20 times a second
代码如下,可以假设所有变量都已正确初始化
var animation = setInterval(function () {
currentFrame++;
if (speedX <= 0.0) {
clearInterval(animation);
}
speedX -= 0.03;
speedY = (speedY + Math.sqrt((2 * currentFrame) / gravityPull));
yPosition += speedY;
if (yPosition > groundY) {
speedY *= -1;
yPosition = groundY;
}
xPosition += speedX;
$("#box").offset({ top: yPosition, left: xPosition });
}, 50);
即使在运行此代码的情况下Chrome看起来完全正常,这在IE中却创造了非常糟糕的性能。实际上,它是如此糟糕,以至于减慢了计算机的速度。
这里有什么问题吗?看来计算相当简单...帧速率不是很高,每秒20帧不是极端,但对于不稳定的动画来说仍然足够流畅。
最佳答案
新发现:Internet Explorer很烂。
好吧,至少是IE8及更高版本。 IE9表现出色。
由setTimeout
和setInterval
触发的定时功能的问题在于,浏览器会在时间到期时尝试执行这些功能,但这实际上仅在空闲时才会发生。而且由于Internet Eplorer
问题是,每次执行“框架”时,IE8都需要50毫秒以上的时间才能完成由计算和DOM更改引起的所有任务。