完成我有类似如下的代码等待一个jQueryanimation内for循环
for(i=0, j=10; i<j ; i++){
$('#an-element-'+i).fadeIn();
}
如何让这个循环中每次迭代只一次淡入开始();动画已完成?
编辑---对不起我的坏我没有包括“我”在环
完成我有类似如下的代码等待一个jQueryanimation内for循环
for(i=0, j=10; i<j ; i++){
$('#an-element-'+i).fadeIn();
}
如何让这个循环中每次迭代只一次淡入开始();动画已完成?
编辑---对不起我的坏我没有包括“我”在环
for
循环是同步的,但动画是异步的。你需要使用递归。
var i = 0, j = 10;
(function fadeNext() {
if (i < j) {
$('#an-element-' + i++).fadeIn(fadeNext);
}
})();
谢谢,有几个类似的答案,但这是最简单的。正如你所说的循环不适合这个(没有使用延迟) –
这段代码是一个美丽的。 – Mattis
根据你的代码,你的循环只会在同一个元素淡出10次。
在任何情况下,你需要的是将通话的淡入方法的回调:http://api.jquery.com/fadeIn/
像这样的东西应该工作(未测试)
var counter = 10;
function fadeIn(elem) {
$(elem).fadeIn('slow', function(){
if (counter > 0) {
fadeIn(elem); //up to you how you figure out which element to fade in
}
});
counter--;
}
//var elem = $('.something');
fadeIn(elem);
后,您可以执行代码通过将其放置在作为回调参数传递的函数中的动画:
$("#foo").fadeIn("slow",function() {
alert("done");
});
但是它并不十分清楚你想要做什么。你是否褪色了同样的元素10次?
抱歉,我已经稍微调整了代码。问题在于for循环不会等待回调并继续进行。 使用这个片段,所有的元素同时淡入,然后我一次得到10个警告框。 –
@matthew对不起,这不是为十个元素的完整解决方案,只是回调语法的一个例子。在接受的答案递归解决方案是最佳AFAIK –
试试这个:
for (i = 0, j = 10; i < j; i++) {
$('.try').each(function() {
$(this).delay(1000).fadeOut().delay(1000).fadeIn();
});
}
您可以更改延迟函数内的持续时间。 Here is the jsFiddle.
,如果你对所有项目进行了固定的延迟,你可以使用下面这行代码:
$(this).fadeIn().delay(2000).fadeOut();
,而不是
$(this).fadeIn();
您可以使用[回调](http://api.jquery.com/fadeIn/) – ExpExc