2012-07-31 187 views
0

我已經函數調用rotator(id):此功能動畫div,我可以調用不同的id此功能動畫不同的元素JavaScript函數調用到每次循環

其實我用5型動物ID,1,2,3,4,5

而且對於電話我需要把:

rotador(1);rotador(2);rotador(3);rotador(4);rotador(5); 

這個問題是我想要在自動模式下旋轉。爲此,我想利用這個

for (i=0;i<=5;i++) { 
    setTimeout(rotador(i),2000); 
} 

但它不工作,因爲它動畫都在同一時間,沒有讓firt執行第一,繼續第一之前去第二次,等等等等,去的時候結束或5號開始其他時間在一個

我的問題是這個,如果你能幫助我謝謝! :)問候

回答

0

使用的回調:

setTimeout(function() { 
    rotador(i) 
}, 2000) 
3

以來的setTimeout()不等待功能,然後再繼續執行,你必須延遲設置爲不同的項目,像不同的值2000 * (i + 1),而不是僅僅2000

編輯:是的,你需要的回調爲Darhazer 2秒後顯示

4

你實際上是調用rodator(I)功能,並計劃執行rodator的結果。換句話說,你的代碼現在equalent到:

for (i=0;i<=5;i++) { 
    var result = rotador(i); 
    setTimeout(result,2000); 
} 

你可以做到這一點通過創建回調函數:

for (i=0;i<=5;i++) { 
    setTimeout((function(i){ 
     return function(){ 
     rotador(i); 
     } 
    })(i),2000 * i); 
} 

,或者你可以調用rotador函數本身下一rodator :

var rotador = function(i){ 
    // your code 
    if (i < 5) { 
     setTimeout(function(){rotaror(i + 1);}, 2000); 
    } 
} 

:在第二示例中的閉合,需要調用該函數與正確值。我們創建一個匿名函數,並創建i作爲局部作用域變量,該值不會被outerscope更改突變。 (我們可以在本地範圍內將i重命名爲n,如果這樣會更具可讀性)。否則,每次調用rotador時,i的值將爲5,因爲i的值在實際函數調用之前將被修改。

+0

在超時關閉中調用'rotador(i)'並將其作爲新函數返回時,有什麼區別?我很好奇:) – 2012-07-31 08:08:53

+2

我的價值。當我用特定的值定義時,我們正在返回一個新範圍中的函數。如果我們只是在函數中調用它,它將具有外部作用域i的值,這將始終是最後一個 - 在這種情況下爲5 – 2012-07-31 08:10:41

+0

Ahh非常感謝,我現在明白了 – 2012-07-31 08:14:17

1
rotationStep(1); 

function rotador(id) 
{ 
    console.log(id); 
} 

function rotationStep(currentId) 
{ 
    rotador(currentId); 
    var nextId = currentId<5 ? currentId+1 : 1; 
    setTimeout(function(){ rotationStep(nextId) },2000); //anonymous function is a way to pass parameter in IE 
} 
+0

沒有適用於我幻燈片,:( – Fran 2012-07-31 09:23:47

+0

您刪除了 功能羅多爾(編號) { 控制檯。日誌(ID); } ? – 2012-07-31 10:29:38