2015-09-22 136 views
0

我有一個程序,應該每半秒鐘在表格中隨機改變一個十字的位置,但是我找不到一個方法讓程序等待半秒鐘它掛着。睡在一個無限循環的Javascript

以下是我的代碼,其中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> 
+0

@AndrewIce請參考http://w3fools.com並停止發送垃圾郵件! ':P'參考http://w3schools.com被認爲是垃圾郵件。 –

+0

也許一個更好的重複:[是否有任何方法睡在一個循環中的JavaScript?](http://stackoverflow.com/q/12230612/218196)。 –

回答

3

的Javascript不具備的功能命名sleep,但你可以使用setTiemout執行給定的時間間隔後的功能。

我還建議您使用setInterval而不是無限循環在指定的時間間隔後執行一組命令。

另一件事是,你的隨機值,這將永遠是使用floor要麼01,這將是永遠2。使用Math.round將值四捨五入到最接近的數字。所以它會選擇所有的值。

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);
<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>

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); 
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); 
+0

我認爲你不明白這個問題,OP想要在設定值後等待半秒鐘,然後又想重新設置該值,請檢查我上面的答案。 – Tushar

0

它看起來像你需要使用javascript的setInterval函數。所以,如果你想你的代碼說,打印的東西,每10秒你會做這樣的事情:

window.setInterval(printString, 10000); 

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

第一個參數是要執行的功能或操作,第二個是間隔(以毫秒爲單位)在每次執行之間。