2013-05-03 70 views
1

我有多少个div,它们应该依次展开。
每个div的展开动画必须延迟到div的动画完成。这按预期工作。.delay()在.animate()后被忽略

在每个步骤的动画之后,我希望能够进一步延迟下一个div的动画。我的问题是,jQuery完全忽略了动画之后的延迟。
.animate()之后拨打.delay()有什么不对吗?

这是我当前的代码:

$('div').each(function(index){ 
    $(this).delay(index*$stepspeed).animate({height: $stepheight[index]}, $stepspeed).delay((index+1)*$stepdelay+$startdelay); 
}); 

回答

我以if跳过第一div延迟解决它。
这是我使用的代码:

$('div').each(function(index){ 
    if(index == 0) {$(this).delay($fadespeed).animate({height: $stepheight[index]}, $stepspeed);} //No delay for the first div 
    else {$(this).delay($fadespeed+index*$stepspeed+(index+1)*$stepdelay+$startdelay).animate({height: $stepheight[index]}, $stepspeed);} 
}); 
+1

结尾处的延迟无关与循环延迟下一个元素,只是增加' $ stepspeed'。 – adeneo 2013-05-03 21:43:06

+0

所以没有办法延迟循环的下一个元素? 如果当前div是循环中的第一个div,那么在动画m之前添加延迟将需要检查。这不会是一个问题,但我认为它会添加不必要的代码... – Afterlame 2013-05-03 21:49:11

+0

总是有超时? – adeneo 2013-05-03 21:53:48

回答

0

也许有一个解决方案,是一个简单了很多,但这里是我的解决方案(fiddle)。

构建其以类似的方式循环调用每个格有点超时后功能:

$(function() { 
    var el = $('div'); 
    lp(0); 
    function lp(count){ 
     $(el.get(count)).animate({height: '200px'}, {duration: 500, queue: true, complete: function() { 
      setTimeout(function(){ 
       if(count != el.length-1) 
       { 
        count++; 
        lp(count); 
       } 
      }, 500); 
     }}); 
    } 
}); 
+0

谢谢,我没有测试过,因为我已经找到了使用If/Else语句的解决方案,但我会研究它。也许你更容易。 – Afterlame 2013-05-04 00:33:47