2010-05-21 67 views
1

我在jQuery中使用多個隊列時遇到問題。考慮以下示例:jQuery中的多個隊列

$('#example').click(function() { 
    $(this).delay(1000, 'fx2').queue('fx2', function() { 
    alert('here'); 
    }); 
}); 

警報從不會觸發。爲什麼?

+0

是否'click'處理程序中執行呢? – SLaks 2010-05-21 20:42:54

回答

7

似乎在第一次使用.dequeue()

.dequeue()被調用時,在接下來的功能,您還需要設置在運動中該隊列自定義隊列調用時delay(或任何其他動畫爲此事)隊列從隊列中移除,然後執行。該函數應該依次(直接或間接)導致.dequeue()被調用,以便序列可以繼續。

$('#example').click(function() { 
    $(this).delay(1000, 'fx2').queue('fx2', function(next) { 
    alert('here'); 
    // start the next anim in the queue... 
    next(); 
    }).dequeue('fx2'); 
}); 

jsbin preview

注意,在queue回調接收一個函數作爲第一個參數。這是您希望在完成「動畫」時調用的函數,以便可以執行隊列中的下一個項目。

jQuery的代碼處理 '自動啓動' 的fx隊列中$.fn.queue() function

if (type === "fx" && queue[0] !== "inprogress") { 
    jQuery.dequeue(this, type); 
} 
+2

一個更簡單的方法是'function(n){alert('here'); N(); }':) – 2010-05-21 21:05:10

+1

+1 - 儘管代碼似乎在回調中沒有'$(this).dequeue('fx2');'也能正常工作。有必要嗎?似乎鏈接的'dequeue()'必須被調用? – user113716 2010-05-21 21:05:15

+0

+1對於自動啓動筆記,但我仍然使用提供的下一個函數作爲您正在排隊的回調的參數,非常乾淨:) – 2010-05-21 21:09:04

-1

請嘗試以下jsFiddle示例。它似乎工作,並做你想做的。

+1

除了使用'fx'隊列而不是'fx2'隊列作爲OP想要的。 - 還是值得在SO鏈接中包含實際的代碼,而不是將實際的答案推給jsFiddle/jsbin – gnarf 2010-05-21 20:57:29

+0

亞歷克斯,你完全錯過了我的問題。我不想使用標準的FX隊列(就像你的工作例子那樣)。 – kingjeffrey 2010-05-21 21:43:52