jquery中的queue和dequeue是一組很有用的方法,他們對於一系列需要按次序執行的函式特別有用。特別animate動畫,ajax,以及timeout等需要一定時間的函式
queue和dequeue的過程主要是:
1,用queue把函式加入佇列(通常是函式陣列)
2,用dequeue將函式陣列中的第乙個函式取出,並執行(用shift()方法取出並執行)
也就意味著當再次執行dequeue的時候,得到的是另乙個函式了
同時也意味著,如果不執行dequeue,那麼佇列中的下乙個函式永遠不會執行
對於乙個元素上執行animate方法加動畫,jquery內部也會將其加入名為 fx 的函式佇列
而對於多個元素要依次執行動畫,則必須我們手動設定佇列進行了。
乙個例子,要兩個div依次向左移動,點選這裡檢視
1div
如果只是輪流移動次數較少,可以使用animate的**函式來做,乙個動畫放在另乙個動畫的**裡邊
比如
1$(「#block1″).animate(,
function
() ,
function
() ,
function
() ,
function
() ,
function
());
8});
9});
10});
11});
但這種方法當動畫較多的時候簡直是殘忍。
此時利用queue和dequeue則顯得簡單很多:
1varfunc=[
2function
() ,anicb);},
3function
() ,anicb);},
4function
() ,anicb);},
5function
() ,anicb);},
6function
() ,anicb);},
7function()8
];9varanicb
=function
() 12
$(document).queue(「myanimation」,func);
13anicb();
1,我首先建議建立了乙個函式陣列,裡邊是一些列需要依次執行的動畫
2,然後我定義了乙個**函式,用dequeue方法用來執行佇列中的下乙個函式
3,接著把這個函式陣列放到document上的myanimation的佇列中(可以選擇任何元素,我只是為了方便而把這個佇列放在document上)
4,最後我開始執行佇列中的第乙個函式
這樣做的好處在於函式陣列是線性展開,增減起來非常方便。
而且,當不要要繼續進行接下來動畫的時候(比如使用者點了某個按鈕),只需要清空那個佇列即可。而要增加更多則只需要加入佇列即可
1//清空佇列
2$(document).queue(「myanimation」,);3//
加乙個新的函式放在最後
4$(document).queue(「myanimation」,
function
());
以前發過乙個wait外掛程式,用於讓動畫之間可以暫停一段時間
可以看一下,他也就是利用了這個原理,預設在fx中插入乙個timeout,放到佇列中,直到timeout結束後才執行dequeue繼續執行佇列中的下乙個函式。
這當然也可以用於ajax之類的方法,如果需要一系列ajax互動,每個ajax都希望在前乙個結束之後開始,之前最原始的方法就是用**函式,但這樣太麻煩了。同樣利用queue新增佇列,每次ajax之後的**中執行一次dequeue即可。
如果沒有使用jquey庫,也可以自己寫段簡易**來解決這個問題。
來自:
STL中stack和queue的用法
發現在平常的編碼中,stack和queue用到的頻率都非常高,自己寫乙個stack和queue又顯得麻煩,今天特地研究如何使用stl中的stack和queue。研究的並不輸入,只是一些簡單用法而已。下面附上我的stack和queue使用 ps 在vs2010中按ctrl f5的時候命令列一閃而過,並...
STL中stack和queue的用法
發現在平常的編碼中,stack和queue用到的頻率都非常高,自己寫乙個stack和queue又顯得麻煩,今天特地研究如何使用stl中的stack和queue。研究的並不輸入,只是一些簡單用法而已。下面附上我的stack和queue使用 include include include include...
STL中stack和queue的用法
發現在平常的編碼中,stack和queue用到的頻率都非常高,自己寫乙個stack和queue又顯得麻煩,今天特地研究如何使用stl中的stack和queue。研究的並不輸入,只是一些簡單用法而已。下面附上我的stack和queue使用 c sharp view plain copy print?i...