2010-10-25 35 views
0

我知道你可以做这样的事情:jQuery的延迟与多个选择

$('#item').fadeOut().delay(1000).fadeIn(); 

将淡出与项目出来的ID的元素,然后逐渐把它再次插入之前等待一秒钟。但是有没有办法淡化一个项目,并将其中一个项目拖延到另一个项目中。我已经试过这一点,但没有奏效:

$('#item1').fadeOut().delay(1000).('#item2').fadeIn(); 

任何帮助非常赞赏

感谢

回答

4

使用回调函数:

$("#item1").fadeOut(function() 
{ 
    $("#item2") 
      // Wait for 600 ms 
      .delay(600) 
      // Fade in 
      .fadeIn(); 
}); 

看到实况:http://api.jquery.com/fadeIn/

fadeIn([d [回调])

持续时间确定动画运行时间的字符串或数字。

easing一个字符串,指示将哪个缓动函数用于转换。

回调函数在动画完成后调用。

+0

如果省略了'duration'参数,默认为400毫秒。这意味着'#item2'将在400 ms后褪色,而不是在OP期望的1000 ms后褪色。 – BoltClock 2010-10-25 12:05:54

+0

我添加了600 ms的示例延迟。 – jantimon 2010-10-25 12:07:52

1

淡化回调中的第二个元素,给它延迟而不是第一个元素。

如果你想延迟仅计算作为第一个元素开始淡出,从总的延迟减褪色速度:

// Assuming default fading speed of 400 ms 
var speed = 400, delay = 1000; 

$('#item1').fadeOut(speed, function() { 
    $('#item2').delay(delay - speed).fadeIn(speed); 
}); 

如果你想延迟计算的第一个元素结束后动画,使用完整的延迟值:

$('#item1').fadeOut(speed, function() { 
    $('#item2').delay(delay).fadeIn(speed); 
}); 
0
setTimeout(function() { $('#item1').fadeOut();}, 500); 
setTimeout(function() { $('#item2').fadeIn(); }, 1000); 
+0

这不会等待'#item1'在开始超时之前淡出。你必须添加fadeOut(我相信400ms)到setTimeout调用的时间。 – 2010-10-25 12:11:41

+0

你现在改变' – ArK 2010-10-25 12:38:48