所以目前我有一个弹跳对象的动画,该动画每秒播放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表现出色。

setTimeoutsetInterval触发的定时功能的问题在于,浏览器会在时间到期时尝试执行这些功能,但这实际上仅在空闲时才会发生。而且由于Internet Eplorer
问题是,每次执行“框架”时,IE8都需要50毫秒以上的时间才能完成由计算和DOM更改引起的所有任务。

10-07 17:53