2011-04-19 1440 views

回答

141

setTimeout將在延遲一段時間(以毫秒爲單位)後執行一些代碼。然而,一個重要的注意事項:由於JavaScript的本質,代碼的其餘部分繼續計時器後運行的設置:

$('#someid').addClass("load"); 

setTimeout(function(){ 
    $('#someid').addClass("done"); 
}, 2000); 

// Any code here will execute immediately after the 'load' class is added to the element. 
+1

目前這是一個糟糕的解決方案,因爲它失去了jquery控制動畫的優勢,如.stop()。一個更好的解決方案是.delay() – user151496 2015-05-11 16:22:46

2

有一個功能,但它是多餘的: http://docs.jquery.com/Cookbook/wait

這個小片段,您可以等待:

$.fn.wait = function(time, type) { 
    time = time || 1000; 
    type = type || "fx"; 
    return this.queue(type, function() { 
     var self = this; 
     setTimeout(function() { 
      $(self).dequeue(); 
     }, time); 
    }); 
}; 
+3

該函數僅影響(an)動畫隊列中的代碼。 – Pointy 2011-04-19 21:57:05

35

這會是.delay()

http://api.jquery.com/delay/

如果你正在做的東西AJAX壽,你真的不應該只是自動寫入「完成」你真的應該等待響應,看看它是否實際上已經完成了。

+1

另外Steven你想''.removeClass('load')'否則你添加這兩個類的加載和完成,這可能是不希望的。如果您確實在等待異步操作完成,那麼最好的辦法就是在.addClass完成並且成功時,如果沒有.addClass('錯誤')也許是一個想法 – 2011-04-19 21:41:25

+38

jQUERY「delay()」函數在no方式提供了類似於通用「等待」設施的任何東西。它是動畫系統的一部分,僅適用於動畫隊列。該函數總是立即返回,然後繼續執行而不會暫停。 – Pointy 2011-04-19 21:53:37

18

意識到這是一個老問題,但我寫了一個插件來解決這個問題問題有人可能會覺得有用。

https://github.com/madbook/jquery.wait

讓你這樣做:

$('#myElement').addClass('load').wait(2000).addClass('done'); 
+1

非常感謝你madlee! – Blauhirn 2015-11-07 21:55:00

-1

使用setTimeout函數,例如Visit here for example

+16

最好不要依賴大多數答案的鏈接 – 2013-08-23 19:12:26

+3

要備份@JamesJenkins評論,這是因爲鏈接並不總是可靠的。如果一個人要添加一個鏈接,最好在代碼中包含代碼本身。 – Tass 2016-04-22 16:29:14

11

延遲()不會做的工作。 delay()的問題是它是動畫系統的一部分,只適用於動畫隊列。

如果您想在執行動畫以外的動畫之前等待該怎麼辦?

使用此:

window.setTimeout(function(){ 
       // do whatever you want to do  
        }, 600); 

,會發生什麼?:在這種情況下它執行花括號內指定的代碼之前等待600毫秒。

一旦我想出來,希望它能幫助你,這對我有很大幫助!