2012-05-06 42 views
5

我已經閱讀了許多關於jQuery隊列的答案和博客文章...並且特別是這個特殊的答案幫了很大忙 - https://stackoverflow.com/a/3314877/1315811。但是,在jquery.com上的標準文檔和上面的答案讓我看看jQuery代碼http://code.jquery.com/jquery-1.7.2.jsjquery auto中的'fx'隊列如何啓動?

我無法理解 - 從代碼 - 'fx'(默認)隊列如何自動啓動。特別是在隊列被清空後。

例如,在自定義隊列中,當您手動啓動隊列,並且隊列中的函數調用完畢時,對隊列的任何引用都不再有效,因此我期望在jQuery代碼中的某處嘗試找出隊列的狀態,如果它是空的,自動啓動它?該代碼有點演示了我遇到了什麼,如果我只是缺少一段代碼(我在上面提到的代碼中查看行:2060-2160),請讓我知道。

> var aq = $({}); 
> aq.queue("mp").length 
0 
> n1 = aq.queue("mp") 
[] 
> n1.length 
0 
> aq.queue("mp", function (next) { setTimeout(next, 5000); }) 
[Object] 
> aq.queue("mp", function (next) { setTimeout(next, 5000); }) 
[Object] 
> aq.queue("mp", function (next) { setTimeout(next, 5000); }) 
[Object] 
> n1.length 
0 
> aq.queue("mp").length 
3 
> n1 = aq.queue("mp"); // reset n1 to the "new" queue... 
> n1.length 
3 

此外,如果有任何部分不清楚,請讓我知道,我會相應地更新。

回答

1

這在queue代碼中的碼位處理自動啓動:

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

如果排隊隊列是fx和隊列是不是已經在進行中,dequeue被調用。

+0

謝謝,我沒有考慮到哨兵「進行中」,並期望他們做一些與隊列長度有關的事情...... – mspisars