2010-09-29 86 views
1

我不明白爲什麼這個代碼不工作:Jquery:延遲fadeOut&clearQueue dosn't工作?

function Messages(type,text) { 
    console.log("In function Message"); 
    $("#message").clearQueue(); 
    console.log("clearQueue :"+$("#message").queue("fx").length+" effet in queue"); 

    if($("#message").length > 0 && $("#message").not(":visible").length == 1) { 
     $("#message").slideDown("slow"); 
    } 

    $("#message").queue(function(){ 
     $(this).delay(5000).fadeOut("slow"); 
     $(this).dequeue(); 
    }); 
    console.log("Adding "+$("#message").queue("fx").length+" effet in queue"); 
} 

這是控制檯日誌:

In function Message 
1346clearQueue :0 effet in queue 
1356Adding 2 effet in queue 

但好像clearQueue不工作,因爲我有這樣的:出現

消息,他消失後5秒..出現

消息,4秒鐘後,我所謂的「消息」又和#Message消失在一秒鐘之後。

所以,如果消息被稱爲一個以上的時間,dosn「T改變和#Message在前看不見的延遲百達5秒,第一個電話後..

你能幫助我嗎?

(對不起,基本的英語,我想盡我所能做到最好)

回答

3

.delay()是一個setTimeout()包裝,所以清除隊列根本就沒有任何影響當設置延遲時,.dequeue()called on the element

如果你想清除這個,你需要自己存儲超時,jQuery當前不在內部執行。自己動手看起來是這樣的:

function Messages(type,text) { 
    var msg = $("#message"); 
    //clear old timer 
    clearTimeout(msg.data("timer")); 
    //clear previous queue 
    msg.clearQueue(); 

    if(msg.filter(":hidden").length == 1) msg.slideDown("slow"); 

    //set and store a new timer 
    msg.data("timer", setTimeout(function() { msg.fadeOut("slow"); }, 5000)); 
} 
+0

謝謝它的作品! (學到的另一件新事物) – Crupuk 2010-09-29 09:38:13

+0

@Crupuk - 歡迎:) – 2010-09-29 09:38:54