【发布时间】:2013-01-28 18:39:21
【问题描述】:
我有这个代码:
var run_anim = "";
var anim_array = ["\animations\pic_1.gif",
"\animations\pic_2.gif",
"\animations\pic_3.gif",
"\animations\pic_4.gif"]
function changeBackgroundURL(elementId, backgroundURL){
run_anim = "false";
document.getElementById(elementId).style.background=backgroundURL;
}
function mouseover_anim(elementName){
run_anim = "true";
changeBackgroundURL(elementName,anim_array[0]);
while(run_anim=="true"){
setTimeout(function(){changeBackgroundURL(elementName,anim_array[1]) parameter = null},30);
setTimeout(function(){changeBackgroundURL(elementName,anim_array[2]) parameter = null},40);
setTimeout(function(){changeBackgroundURL(elementName,anim_array[3]) parameter = null},20);
}
}
我正在运行这条线:
<area shape="rect" coords="0,0,95,91"
onMouseOver="mouseover_anim('div_1')"
onMouseOut="changeBackground('div_1', 'pic_static.gif')">
当我运行它时,应用程序会占用大量 CPU,我需要关闭浏览器。看起来while循环(总是如此)阻塞了孔系统(但我没有看到任何图片变化)。在浏览器中调试时,我也看不到任何错误消息。我也尝试过预加载图片(代码未在上面发布),但还是不行。
代码仅在我禁用while循环并设置更长的超时时间时有效,如下所示:
function mouseover_anim(elementName){
changeBackgroundURL(elementName,anim_array[0]);
setTimeout(function(){changeBackgroundURL(elementName,anim_array[1]) parameter = null},300);
setTimeout(function(){changeBackgroundURL(elementName,anim_array[2]) parameter = null},400);
setTimeout(function(){changeBackgroundURL(elementName,anim_array[3]) parameter = null},200);
}
那么用 Javascript 创建循环动画和/或快速动画是不可能的吗?或者你有什么建议吗?
【问题讨论】:
-
PS:由于IE中的垃圾收集需要“参数= null”:makemineatriple.com/2007/10/…
-
300 / 30 毫秒太频繁了 - 尝试将其更改为更有意义的值,例如 3 秒。此外,您不想设置每 X 分钟调用 3 个函数,您想要的是使用
setTimeout,只有一个函数将在图片之间旋转 -
更有意义?动画至少有 25 pic/sec,所以是 40 毫秒。我需要这些功能,因为不是每张图片都保持相同的时间,这是将动态融入动画所必需的(我更新了...)
-
关于我的最后一条评论:
setInterval不是setTimeout...
标签: javascript animation background-image settimeout setinterval