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); }