2014-05-09 186 views
0

我是JavaScript新手,我正在嘗試每天進行小型練習。我很難弄清楚是否有可能爲for-loop添加時間延遲。所以當代碼從一個我到另一個時,它會等待一秒鐘。爲循環添加時間延遲

我正在嘗試構建一個小程序,爲用戶輸入的每個字母播放聲音。例如,對於數字,它將播放聲音併爲字母播放另一個聲音。當它從一個我到另一個(i ++)時,它只需等待一秒鐘,所以聲音不會一次播放。

預先感謝您。

function getText() 
    { 
    var myString=document.name1.ids.value; 
    var list3 = myString.split('') 
    var list1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]; 
    var list2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; 
    for (var i = 0; i < list3.length; i++) { 
     if(list1.indexOf(list3[i]) >= 0){ 
      audio.play(); 

    } 
     else if(list2.indexOf(list3[i]) >= 0){ 
      audio2.play(); 
    } 
     else{ 

    } 
    } 
    } 
+0

由於JS是單線程,這是一個非常糟糕的主意,把延遲到loop.You可能嘗試使用定時器等window.setTimeout(回調,1000),有回調函數打電話給下一秒。 –

+0

可能的重複[如何在JavaScript循環中添加延遲?](http://stackoverflow.com/questions/3583724/how-do-i-add-a-delay-in-a-javascript-loop) –

回答

1

您不能for循環字面上延遲執行的,但你可以使用一系列的setTimeout

function getText() { 
    var myString = document.name1.ids.value; 
    var list3 = myString.split('') 
    var list1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]; 
    var list2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; 

    for (var i = 0; i < list3.length; ++i) { 
     setTimeout(playOne.bind(null, list3[i]), i*1000); 
    } 

    function playOne(entry) { 
     if (list1.indexOf(entry) >= 0) { 
      audio.play(); 

     } else if (list2.indexOf(entry) >= 0) { 
      audio2.play(); 
     } 
    } 
} 

這由調度回調在0 list3每個條目工作秒,1秒,2秒等。Function#bind返回一個新的函數,該函數在調用時將以給定的this值(我們使用null,因爲我們不需要特定的值)和您給它的參數運行。所以我們排隊playOne在0秒播放第一個條目,在一秒鐘播放第二個條目等。

在引擎上有Array#forEach(它們幾乎都有,並且可以填充那些沒有的)可以更簡單:

function getText() { 
    var myString = document.name1.ids.value; 
    var list3 = myString.split('') 
    var list1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]; 
    var list2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; 

    list3.forEach(function(entry) { 
     if (list1.indexOf(entry) >= 0) { 
      audio.play(); 

     } else if (list2.indexOf(entry) >= 0) { 
      audio2.play(); 
     } 
    }); 
} 
+1

謝謝你的迴應。這非常有幫助。 – aka