2014-05-09 131 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