在Javascript中无限循环中睡觉

时间:2015-09-22 13:40:17

标签: javascript html

我有一个程序,它应该每半秒钟一次地随机改变一个表格中十字架的位置,但我找不到一种方法让程序等待半秒而不会挂起。

以下是我的代码,其中sleep(0.5)应该用不同的东西切换:

<!DOCTYPE html>
<html>
<body>
    <table>
        <tr>
            <td id="0x0">X</td>
            <td id="1x0">X</td>
            <td id="2x0">X</td>
        </tr>
        <tr>
            <td id="0x1">X</td>
            <td id="1x1">X</td>
            <td id="2x1">X</td>
        </tr>
        <tr>
            <td id="0x2">X</td>
            <td id="1x2">X</td>
            <td id="2x2">X</td>
        </tr>
    </table>
    <script>
        for(;;) {
            var x = Math.floor(Math.random()*2);
            var y = Math.floor(Math.random()*2);

            id = x.toString() + "x" + y.toString();         
            document.getElementById(id).innerHTML = "O";               
            sleep(0.5);
            document.getElementById(id).innerHTML = "X";
        }
    </script>
</body>
</html>

4 个答案:

答案 0 :(得分:3)

Javascript没有名为sleep的函数,但您可以在给定的时间间隔后使用setTiemout执行函数。

我还建议您使用setInterval而不是无限循环来在指定的时间间隔后执行命令集。

另一件事是您在随机值上使用floor,该值始终为01,并且它永远不会{{1 }}。使用2将值四舍五入到最接近的数字。因此,它会选择所有值。

&#13;
&#13;
Math.round
&#13;
setInterval(function() {
  var x = Math.round(Math.random() * 2);
  var y = Math.round(Math.random() * 2);

  id = x.toString() + "x" + y.toString();
  document.getElementById(id).innerHTML = "O";

  setTimeout(function() {
    document.getElementById(id).innerHTML = "X";
  }, 500);
}, 100);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

只需使用setTimeout代替sleep

function doSomething () {

    document.getElementById(id).innerHTML = "X";

    var x = Math.floor(Math.random()*2);
    var y = Math.floor(Math.random()*2);

    id = x.toString() + "x" + y.toString();         
    document.getElementById(id).innerHTML = "O";               

    setTimeout(doSomething, 500);

}

setInterval方式:

setInterval(function () {

    document.getElementById(id).innerHTML = "X";

    var x = Math.floor(Math.random()*2);
    var y = Math.floor(Math.random()*2);

    id = x.toString() + "x" + y.toString();         
    document.getElementById(id).innerHTML = "O";               

}, 500);

答案 2 :(得分:0)

可能更容易使用setInterval,它会每千分之一秒为你调用一个函数。

setInterval(function(){
   var x = Math.floor(Math.random()*2);
   var y = Math.floor(Math.random()*2);
   id = x.toString() + "x" + y.toString();         
   document.getElementById(id).innerHTML = "O";               
   document.getElementById(id).innerHTML = "X";
}, 500);

答案 3 :(得分:0)

您似乎需要使用javascript&#39; setInterval功能。所以,如果你想让你的代码说出来,每10秒打印一次,你就可以这样做:

window.setInterval(printString, 10000);

var printString = function() {
    console.log("hello world");
}

第一个参数是您希望执行的函数或操作,第二个参数是每次执行之间的间隔(以毫秒为单位)。