我想在JavaScript中使用递归来产生无限循环。事实上,我希望无休止地为图像提供一种来来往往的效果。
我们先来看一些代码:
function lightening(){
$('#pic_holder').fadeOut(250).fadeIn(250);
setTimeout('lightening', 250);
}
这个函数,正如它所写,应该
fadeOut(250)
和fadeIn(250)
效果; setTimeout
函数,该函数必须递归调用lightening
函数,从此重新应用[ fadeOut-fadeIn效果和 setTimeout ]代码块。这一点,你会同意,应该无限制地进行,但事实并非如此。
这是full test code, with HTML,您可以注意到,它仅应用fadeOut-fadeIn效果一次。
我做错了什么?
答案 0 :(得分:7)
你 应该做的是:
function lightening(){
$('#pic_holder').fadeOut(250).fadeIn(250, lightening);
}
当淡入完成时,这将使下一个周期开始。将您自己的超时与jQuery动画调用所暗示的超时混合是棘手的,通常是不必要的。在你的情况下,你在前一个循环中途开始一个新的循环,直到250毫秒之后才会生效。
答案 1 :(得分:6)
setTimeout
的第一个参数可以是:
您的函数未被调用,因为您的名称只是在字符串中。删除单引号。
function lightening(){
$('#pic_holder').fadeOut(250).fadeIn(250);
setTimeout(lightening, 250);
}
答案 2 :(得分:3)
不要使用2个具有间歇性错误或必须过于慷慨的竞争计时器,而是使用回调:
function lightening(){
$('#pic_holder').fadeOut(250).fadeIn(250, lightening);
}
答案 3 :(得分:1)
删除引用。
setTimeout(lightening, 250);