jquery / js:让图像淡入淡出的最佳方法? (递归?)

有没有比这更好的方法,因为两个图像位于彼此之间,其中#state_2是顶部图像。

function recursive_fade(){ $('#top_img').delay(4000).fadeOut(400).delay(4000).fadeIn(400); recursive_fade(); }; $(function(){ recursive_fade(); }); 

当我dynatrace这个,它似乎使用相当一点的CPU …

你应该在这里使用continuation-style:让fx系统在最后一个动画结束时调用recursive_fade

 function recursive_fade(){ $('#top_img') .delay(4000) .fadeOut(400) .delay(4000) .fadeIn(400, recursive_fade ); }; 

编辑2 – 同时,似乎( jQuery论坛长期存在)效果是使用队列和setTimeout函数实现的 – 使EDIT 1过时。

编辑 – 因为我不知道jQuery是否允许这种递归(我没有找到令人信服的证据),我认为最好将“超时”建议与延续技术结合起来,如下所示:

 function recursive_fade(){ $('#top_img') .delay(4000) .fadeOut(400) .delay(4000) .fadeIn(400, function() { setTimeout( recursive_fade, 0 ); } ); }; 

这样可以保证堆栈不会爆炸,但无需计算超时间隔。

我不会递归地做,我会使用setTimeout所以它不会完全锁定浏览器。

 function recursive_fade(){ $('#top_img').delay(4000).fadeOut(400).delay(4000).fadeIn(400); setTimeout(function(){recursive_fade(); },8800); }; $(function(){ recursive_fade(); }); 

如何使用setInterval() 。 信息在这里 。

像这样的东西:

 function fadeShow() { $('#top_img').delay(4000).fadeOut(400).delay(4000).fadeIn(400); } $(function() { setInterval(fadeShow, 8800); }