2011-06-09 38 views
0

setTimeout不能按預期工作,因爲它將執行下面的代碼而不等待延遲運行'setTimeout'的第一個參數setTimeout First Delay不生效

(function() { 
    var a = ['#bird','#flower','#cat']; 
    var totalno = settings.imageArray.length; 
    function rotateImages(start) { 
     var nextImage = start + 1; 
     if(nextImage % totalno == 0){ 
     nextImage=0; 
     } 

     //do animate here 
     $(settings.imageArray).fadeOut(); 

     window.setTimeout(function() { 
      rotateImages(++start % totalno); 
     }, settings.imageArray[start].delay); 
    } 
    rotateImages(0); 
})(); 

有沒有辦法寫它以使它不淡出馬上第一張圖片?

簡化版將是:

(function() { 
    var a = ['#bird','#flower','#cat']; 

    function rotateImages(start) { 
      //do something here 

     window.setTimeout(function() { 
      rotateImages(++start % a.length;); 
     }, 1000); 
    } 
    rotateImages(0); 
})(); 
+0

什麼是settings.imageArray [開始] .delay設置當代碼執行(以類似Firebug的檢查, ) – kinakuta 2011-06-09 08:10:42

+0

它取決於對象..它的屬性是圖像名稱,圖像延遲等.. – hamahama 2011-06-09 09:01:25

回答

1

它將執行下面 代碼隨後無需等待 延遲運行的 「的setTimeout」

第一個參數這看起來像直接開始第一個旋轉。相反的:

rotateImages(0); 

嘗試延遲啓動第一旋轉,如:

window.setTimeout(function() { 
     rotateImages(0); 
    }, settings.imageArray[0].delay); 
+0

所以我必須創建另一個超時?傳遞給rotateImage的參數必須基於數組變量 – hamahama 2011-06-09 09:04:29

+0

是不是隻傳遞0給rotateImages? – kinakuta 2011-06-09 09:24:47

+0

是的。謝謝!我實際上已經創建了一個獨立的函數來調用,所以第一次不會被激活! – hamahama 2011-06-15 01:06:09