2016-01-03 48 views
1

我有一個setInterval循環動畫,每個遞歸之間有一個延遲。
該隊列首先執行延遲然後執行該功能,所以第四個
可以使頁面加載後動畫立即開始,那麼延遲?
我知道animate()有一個強制queue參數,但是會觸發插件(animate()內的函數)觸發,但不觸發定時器(setInterval)。
這是一個動畫隊列setInterval

setInterval(function() { 
    $('div').animate({ 
     marginLeft: '+=150px' 
    }, 800, 
    function() { 
     $(this).animate({ 
     marginLeft: '-=150px' 
     }, 800) 
    }) 
}, 3000) 

我不想開始新的問題的sample,但因爲它是相關的,我發現這裏在這個question,我可以循環使用setTimeout這是更好,因爲當你改變標籤有一個錯誤,你切換回來,元素變得混亂
這給了我的想法,以控制該update
的除了延遲不能設置,無論我多麼改變數值
這裏的最後update在應用queue參數後,我期望立即工作,然後應用延遲,但延遲不能設置

回答

1

也許像

//first we create the function and give it a name (so it can be re-called) 
//we then wrap it in parentheses and invoke it with() so it fires immediately (this is an IIFE) 
(function loop() { 
    //animate right 
    $('div').animate({ marginLeft: '+=150px' }, 800, function() { 
     //when the animate right is done, animate back left 
     $(this).animate({ marginLeft: '-=150px' }, 800, function(){ 
      //setTimeout wants a function to invoke and a duration to wait until doing so 
      //we give it 'loop' which is the name of our function so it will be re-used, thus creating the complete animation loop 
      setTimeout(loop, 3000); 
     }); 
    }); 
})(); 

更多參考:https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout

要談的東西功能多一點。假設你有以下...

function sayDog() { console.log('dog'); } 
function sayCat() { console.log('cat'); } 

那兩個人函數定義。如你所知,他們的實際邏輯只有在你給他們打電話之後纔會執行。

sayDog(); <-- invoke sayDog 
sayCat(); <-- invoke sayCat 

但在JavaScript中,這些名稱只是變量。我們可以很容易地將它們定義爲...

var sayDog = function() { console.log('dog'); } 
sayDog(); 

以相同的結果結束。 現在讓我們看看setTimeout。 setTimeout的目的是在一段時間內延遲函數的執行。所以說你有這個...

setTimeout(sayDog(), 1000); 

你會期望sayDog在執行前等待1000。但你用()明確執行它,所以它沒有等待。作爲一個方面說明,如果sayDog沒有返回另一個函數來執行,那麼setTimeout在1000之後不會有任何事情要做。

function printPet (petFunction) { petFunction(); } 
printPet(sayDog); 
printPet(sayCat); 

將函數引用傳遞給其他函數是完全有效的。上面有printPet採取任何給予它並援引它。它也會導致sayDog和sayCat被調用。

+0

有關您最後一個代碼的文檔:https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference /函數 對象引用是值,謝謝 – Amine