Javascript 在动画回调完成之前触发jquery循环进行迭代?
我试图制作一个连续的动画,循环在元素列表Javascript 在动画回调完成之前触发jquery循环进行迭代?,javascript,jquery,animation,fadein,sequential,Javascript,Jquery,Animation,Fadein,Sequential,我试图制作一个连续的动画,循环在元素列表.post中迭代,然后缓慢地淡入淡出。困难的部分是让下一个迭代在最后一个迭代结束之前开始淡入。到目前为止,我所拥有的只是一个简单的顺序动画,一个接一个地淡出它们 $(".post").hide(); var posts = $(".post"), i = 0; (function() { $(posts[i++]).fadeIn('slow', arguments.callee); })(); 有人知道我怎样才能在上一个元素完成之前将其更改为
.post
中迭代,然后缓慢地淡入淡出。困难的部分是让下一个迭代在最后一个迭代结束之前开始淡入。到目前为止,我所拥有的只是一个简单的顺序动画,一个接一个地淡出它们
$(".post").hide();
var posts = $(".post"),
i = 0;
(function() {
$(posts[i++]).fadeIn('slow', arguments.callee);
})();
有人知道我怎样才能在上一个元素完成之前将其更改为允许
.post
到fadeIn()。使用each()
对它们进行迭代,并对每个元素使用setTimeout()
,将动画的持续时间乘以每个元素中当前的索引
var posts = $(".post").hide();
// Holds reference to the index of the current iteration
// ------------------v
posts.each(function( index ) {
var $th = $(this);
setTimeout(function() {
$th.fadeIn('slow'); // Removed arguments.callee
}, index * 300);
});
因此,每个setTimeout()
的持续时间都将为n*600
,这将为您提供所需的效果
顺便说一下,如果您不需要将posts
变量用于任何其他用途,您可以消除它并将.each()
链接到.hide()
之后,如$(.post”).hide().each(func…
编辑:我出错了。我在具有不同值的setTimeout()
中使用了this
。编辑以传入正确的值
编辑:误读了问题。将setTimeout()
的持续时间更改为300
,以在动画中提供部分重叠。类似于patrick的解决方案,但在我看来更干净一些
(function() {
$(".post").hide().each(function(index){
$(this).delay(index * 300).fadeIn('slow');
});
})();
,则300
是延迟的持续时间,其中的'slow'
是衰减的持续时间请原谅我的愚蠢。我对jquery并不例外。但这会返回“太多递归”。我甚至不知道从哪里开始破译how@Trip-不知道你为什么会收到,但请查看我的更新。我在代码中有一个错误。@Trip-另外,如果代码比问题中显示的多,请确保您还没有在循环中。我不确定参数.callee的目的是什么。你可能想把它去掉。太棒了,它很管用,我只是傻了(和往常一样)。为了让它更明显,我修改了fadeIn(1500)和索引*300@Trip-这里有一个例子,说明了它的作用。我需要更多地查看您的代码,看看哪里出了问题。我不知道你说的“在最后一个完成之前”是什么意思。我以为你想让它们循序渐进。你是说你想让它们同时发生?或者部分重叠?啊,是的,它确实有效,我意识到在改变参数使其成为更明显的二者之间。