Jquery .animate()之后忽略.delay()
我有许多div,它们应该依次展开。Jquery .animate()之后忽略.delay(),jquery,jquery-animate,delay,Jquery,Jquery Animate,Delay,我有许多div,它们应该依次展开。 必须延迟每个div的展开动画,直到完成之前的div动画。这正如预期的那样有效 在每个步骤的动画之后,我希望能够将下一个div的动画再延迟一点。我的问题是,jQuery完全忽略了动画之后的延迟。 在.animate()之后调用.delay()有什么错误吗 这是我当前的代码: $('div').each(function(index){ $(this).delay(index*$stepspeed).animate({height: $stepheight
必须延迟每个div的展开动画,直到完成之前的div动画。这正如预期的那样有效 在每个步骤的动画之后,我希望能够将下一个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);}
});
也许有一个更简单的解决方案,但这是我的解决方案() 以类似循环的方式构建一个函数,在稍微超时后为每个div调用该函数:
$(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);
}});
}
});
末尾的延迟与延迟循环中的下一个元素无关,只需增加
$stepspeed
。那么就没有办法延迟循环中的下一个元素了?如果当前div是循环中的第一个div,则在animationm之前添加延迟需要进行检查。这不会是一个问题,但我认为它会添加不必要的代码…总是有超时?我试图在元素末尾添加一个setTimeout
,但这只会给我带来错误…我现在使用If/Else。谢谢,我没有测试这个,因为我已经找到了使用If/Else语句的解决方案,但我会调查的。也许你的更容易。