为什么fadeOut()等待delay()和hide()不行?

时间:2011-12-20 08:51:42

标签: jquery

This你会找到一个例子:

<div id="first_div">First Div<div>
<div id="second_div">Second Div<div>

$('#first_div').show().delay(2000).fadeOut(300);
$('#second_div').show().delay(2000).hide();

如您所见,fadeOut()在2秒后被调用; hide()立即被称为hide()。为什么? delay()不等待{{1}}功能。

4 个答案:

答案 0 :(得分:5)

快速而肮脏地看待documentation会发现这个

  

仅延迟队列中的后续事件;例如,这将   不延迟.show()或.hide()的无参数形式   使用效果队列。

答案 1 :(得分:2)

hide()只需将display设置为none,这样就不会发生可以排队的动画。

尝试:

$('#second_div').show().delay(2000).queue(function (n) {
  $(this).hide();
});

http://jsfiddle.net/RMMRj/1/

另外,您应该注意关于delay的jquerys免责声明:

  

.delay()方法最适合在排队的jQuery之间延迟   效果。因为它是有限的 - 例如,它没有提供一种方法   取消延迟-.delay()不是JavaScript本机的替代品   setTimeout函数,可能更适合某些用途   例。

所以这可能更合适:

setTimeout(function () {
  $('#second_div').hide();
}, 2000);

答案 2 :(得分:1)

您没有为.hide()

指定时间

例如.hide(2000);

你可以从那里推迟。

答案 3 :(得分:1)

来自Jquery Delay

  

在版本1.4中添加到jQuery,.delay()方法允许我们延迟   在队列中执行跟随它的函数。它可以使用   使用标准效果队列或使用自定义队列。只要   队列中的后续事件被延迟;例如,这不会   延迟不使用的.show()或.hide()的无参数形式   效果排队。

基本上,fadeOut使用效果队列,因此会延迟。但show(),hide()不遵循任何队列