2010-04-05 85 views
25

我有響應於頁面上的用戶操作在屏幕的頂部顯示通知消息的小的jquery片段。該通知通常在Ajax動作之後顯示,其中包含動態內容。如何停止/重寫Jquery TimeOut函數?

例如:

$("#mini-txt").html("Thank you!"); 
$("#mini").fadeIn("fast"); 
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000); 

通知效果良好,當用戶執行在快速連續的兩個或更多個動作,在這種情況下,超時功能會混淆本身和所述第二消息不同之處看起來是內部的前3000毫秒。

如果執行新操作,是否有辦法「殺死」以前的通知。我對動作/選擇器,只有TimeOut函數沒有任何問題....要麼停下來,要麼以某種方式覆蓋它。或者也許有更好的選擇讓消息在消失前留在屏幕上幾秒鐘?

謝謝。

回答

56

首先,存儲爲setTimeout函數的返回值:

// Set the timeout 
var timeout = setTimeout(function() 
    { 
     // Your function here 
    }, 2000); 

然後,當你準備殺超時......你剛纔叫clearTimeout與先前保存的值致電setTimeout

// Then clearn the timeout 
clearTimeout(timeout); 
+0

它會在清除後執行超時功能嗎? – sbs 2017-07-18 06:55:49

6

您可以使用.stop()

停止當前正在運行的動畫 上匹配的元素。

6

的jQuery 1.4有一個內置的方法來處理動畫的延遲,你可以這樣做:當你要清潔的動畫隊列中,你可以做

$("#mini-txt").html("Thank you!"); 
$("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium"); 

再後來:

$("#mini").stop(true); 
0

這將功能運行後清除暫停時以延遲爲500ms

var timeout = setTimeout(function(){ 

/* YOUR FUNCTION */ 

}, 500, function(){ 
    clearTimeout(timeout); 
});