看過 上一回 [https://blog.hinablue.me/entry/jquery-queue-and-sure-your-stop-really-stop/]
的問題之後,我們接著看 queue() 與 dequeue() 在核心中做了甚麼事情:
jQuery.extend({
queue: function( elem, type, data ) {
if ( !elem ) {
return;
}
type = (type || "fx") + "queue";
var q = jQuery.data( elem,
前陣子例用 queue 做了許多東西,慢慢的發現,原生的 stop() 並非我想像中的樣子。
* 使用任何的動態效果,或是 delay() 這樣的效果,stop() 能使之停止。
* 使用 queue(),stop() 能使之停止。
* stop() 可以傳入兩個布林值,一個是 clearQueue,另一個是 JumpToEnd。
然而,我卻發現事實上並不是這樣。
* stop() 僅可停止單一動態動態效果,若連續使用並不會停止後續動作。
例如:$('div').animate( { 'left' : '500px'
今天工作的時候,為了要在畫面上加入一些動態效果,並且讓他循序自動執行。所以有這方考量:
* 使用 setTimeout 或是 setInterval
* 利用 animate 可以延遲的方式重新呼叫
* 使用 queue
首先我嘗試了第一個方法,將要執行的東西,包成 function,然後利用 setTimeout 或是 setInterval
呼叫。很好,他可以運作了,但是我遇到另一個問題,當我需要中斷他,或是暫停的時候,用這種方式呼叫就相對的麻煩。因為我加入了動態(Effect)的效果,如果直接強制中斷,那該怎麼知道他做到