2011-12-20 54 views
1

This,你會發現一個例子:爲什麼fadeOut()等待delay()和hide()不是?

<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(); 

,你可以看到,​​2秒後調用;立即稱爲hide()。爲什麼? hide()不等待delay()函數。

回答

1

Jquery Delay

加入jQuery的1.4版本中,.delay()方法允許我們推遲 的跟在它後面的隊列功能的執行。它可以使用 與標準效果隊列或自定義隊列。隊列中後續事件只有 延遲;例如,這不會 延遲不使用 效果隊列的.show()或.hide()的無參數形式。

基本上,fadeOut使用效果隊列,因此被延遲。但show(),hide()不會跟隨任何隊列

5

一個快速和骯髒看documentation會透露了這一

在隊列中只有後續事件都被延遲;例如,這將 不延遲.show()或.hide()的無參數形式,其中 不使用效果隊列。

2

hide()僅設置displaynone所以沒有動畫發生可能被排隊。

嘗試:

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

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

你也應該注意到jquerys免責約delay

的.delay()方法是最適合的jQuery排隊效果 之間延遲。因爲它是有限的 - 例如,它不提供一種方式來取消延遲 - .delay()不是替代JavaScript的原生 setTimeout函數,這可能更適合某些使用 的情況。

所以這可能是比較合適的:

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

你沒有指定.hide)

例如.hide時間((2000);

你可以從那裏延遲它。

+0

?但延遲將在.hide()(其中,等待2秒)之前執行。隱藏後應開始,並隱藏我的元素(但2秒鐘,我應該仍然看到它)。同樣的邏輯是延遲().... – markzzz 2011-12-20 08:58:07

+0

是的,但這不會對.hide()或.show()。 這裏指 http://api.jquery.com/delay/ 「例如這不會耽誤.show()或.hide(),它不使用效果隊列的無參數的形式。 「 – XepterX 2011-12-20 09:08:11