【发布时间】:2010-11-18 02:13:40
【问题描述】:
我有一个复杂的动画序列,涉及 JavaScript 中的淡入淡出和过渡。在这个由四个同时变化的元素组成的序列中,每个元素都使用setTimeout。
在 Internet Explorer 9 中测试,动画以实时速度运行(它应该需要 1.6 秒,而它恰好需要 1.6 秒)。任何其他浏览器都会严重滞后,动画时间为 4 秒(Firefox 3 和 4、Chrome、Opera),而在 IE 8 及更低版本中则为 20 秒。
IE9 怎么能跑得这么快,而所有其他浏览器都陷入泥潭?
我试图找到将元素合并为一个的方法,以便在任何给定时间都有一个 setTimeout,但不幸的是它无法承受任何干扰(例如单击不同的链接以开始新的当前动画完成之前的动画)。
编辑:为了详细说明对 cmets 的响应,这里是代码的大纲:
link.onclick = function() {
clearTimeout(colourFadeTimeout);
colourFadeTimeout = setTimeout("colourFade(0);",25);
clearTimeout(arrowScrollTimeout);
arrowScrollTimeout = setTimeout("arrowScroll(0);",25);
clearTimeout(pageFadeOutTimeout);
pageFadeOutTimeout = setTimeout("pageFadeOut(0);",25);
clearTimeout(pageFadeInTimeout);
pageFadeInTimeout = setTimeout("pageFadeIn(0);",25);
}
四个函数中的每一个都将淡入淡出一帧,然后设置另一个超时,参数递增,直到动画结束。
您可以在http://adamhaskell.net/cw/index.html 看到页面(用户名:knockknock;密码:goaway)(它有声音和音乐,可以禁用,但要注意!) - 我的 JavaScript 非常混乱,因为我没有真正组织得当,但有一些评论,希望你能看到大致的想法。
【问题讨论】:
-
你能详细说明一下吗?是动画本身很慢,还是由于等待超时发生,动画不同部分之间存在等待时间?此外,一些代码会有所帮助。
-
动画的四个部分是:(1)用
opacity淡出当前页面,(2)用opacity淡入新页面,(3)用@987654326淡化页面颜色@, (4) 使用left滚动导航栏上的指针(是的,这是非常过分的,但主要是为了炫耀)。动画应该以 40FPS(超时间隔为 25ms)运行,但在较慢的浏览器中,每帧至少需要两倍的时间,并且有可见的跳跃。 -
发布代码可能会让您感到痛苦,因为它现在太乱了......
-
你可能在某个地方错过了一个跳舞的婴儿
-
我认为一次发生的事情太多了,这与
setTimeout关系不大。您可能希望使用此页面来宣传 IE9 中的高级 Javascript 引擎,但如果您对其他浏览器能够处理它感兴趣,您可能需要稍微降低效果。 (或者以更好的方式来做。不过,我真的不会查看你凌乱的脚本进行优化。:))
标签: javascript firefox google-chrome lag