2011-11-04 57 views
0
var arr = [[1,2,3],[4,5,6],[7,8,9]]; 


function out(ar){ 

    var interval = setInterval(function(){ 
    for (var i=0; i<ar.length;i++){ 

     for (var j=0;j<ar[i].length;j++){ 

     document.write(ar[i][j]); 

     } 
    document.write("</br>"); 
    } 
    clearInterval(interval); 
    },1000); 

} 

out(arr); 

http://jsbin.com/edanib/edit我如何在迭代之間設置一秒延遲?

此代碼的工作,但我想每個輸出數字之前做出一秒的延遲。 上面的代碼不能這樣做。我該怎麼做vanilla Javascript?

+3

請勿使用'document.write'。 – SLaks

回答

1

setInterval不能保證獲得優1個第二間隔,因爲其他的事情可能會遇到,但你可以用下面的

function out(ar) { 
    var i = 0, j = 0; 
    var interval = setInterval(function(){ 
    // Start with the next row if the last one was finished. 
    if (i < ar.length && j == ar[i].length) { 
     ++i; 
     j = 0; 
     // Put a line after it. 
     document.body.appendChild(document.createElement('br')); 
    } 
    // Check if we're out of rows. 
    if (i >= ar.length) { clearInterval(interval); return; } 

    // Write out a number. 
    document.body.appendChild(document.createTextNode('' + ar[i][j])); 

    // We're done with the cell that we just wrote. 
    ++j; 
    }, 1000 /* milliseconds */); 
} 

親近把數組索引的功能之外,所以每次間隔火災,它從上次運行中獲得循環狀態。

此外,您不能在間隔處理程序中使用document.write,因爲在文檔關閉之後調用document.write會破壞現有文檔。

+0

謝謝!但我想輸出他們像這樣123 br 456 br 789可能嗎? – DrStrangeLove

+0

@DrStrangeLove,我編輯來做到這一點。 –

+0

非常感謝! :) – DrStrangeLove

0

最簡單的方法是用setInterval創建一個循環。具備的功能捕捉計數器,並增加他們適當動輒

請嘗試以下

function output(arr) { 
    var i = 0; 
    var j = 0; 
    var interval = setInterval(function() { 

    while (i < arr.length && j === arr[i].length) { 
     j = 0; 
     i++; 
    } 

    if (i === arr.length) { 
     clearInterval(interval); 
    } else { 
     document.write(arr[i][j]); 
    } 
    j++; 
    }, 1000); 
}; 
+0

小數點。如果傳遞一個空數組,這將導致控制檯中的垃圾郵件異常。 –

+0

@MikeSamuel好抓。已更新爲處理空arr並正確處理空子數組(arr [i]') – JaredPar

0

嘗試這樣的:首先,創建一維數組,你給調用輸出功能本身延遲:

var arr = [[1,2,3],[4,5,6],[7,8,9]]; 


function out(ar){ 
    var singleDim = [] 
    for (var i=0; i<ar.length;i++){ 

     for (var j=0;j<ar[i].length;j++){ 

      singleDim.push(ar[i][j]); 

     } 
    } 
    outDelayed(singleDim,0,1000); 
} 

function outDelayed(arr,index,delay) { 
    if (index < arr.length) { 
     document.write(arr[index]); 
     setTimeout(function(){ 
      outDelay(arr,index+1,delay); 
     },delay); 
    } 
} 

out(arr);