2017-11-02 10 views
-2

私はjsだけを使用して反応タイマーを構築しようとしていますが、いつでも私のearlyClick、私のsetTimeout doestが働いているようです。早期にクリックしないと、問題は発生しません。 earlyClickの問題を修正する必要があります。助けてください!この場合、javascriptでsetTimeout関数を停止する方法はありますか?

<!DOCTYPE html> 
<html> 
<head> 
    <title>Reflex Calculator</title> 
    <link rel="stylesheet" type="text/css" href="reflexCalculator.css"> 
</head> 
<body> 

<div id="container"> 

    <h1 id="seconds"></h1> 
    <h2 style="text-align: center;" id="text">Click to begin.</h2> 

</div> 

<script type="text/javascript"> 

var startTime, endTime, difference; 
    /*sets delay amount*/ 

    var randomNumberBetween2and19 = Math.floor(Math.random() * 20)+2; 
    function delay1(){ 
     var seconds=randomNumberBetween2and19/5; 
     return seconds; 
    } 
    var time=delay1().toFixed(3); 
    /*program begins*/ 
    document.getElementById("container").onclick=function(){ 
    firstClick();} 
    /*Reflex timer starts with initial color green!*/ 
    function firstClick(){ 

     document.getElementById("container").style.background="red";/*green*/ 
     document.getElementById("text").innerHTML="wait till blue"; 

主な問題が発生した場所ですが、私は、早期クリックearlyClick機能を実行したsetTimeoutを停止するのsetTimeout

 if(document.getElementById("container").clicked) earlyClick(); 


     else setTimeout(calculateReflex, time*1000); 
    } 
    function earlyClick(){ 
     document.getElementById("text").innerHTML="Too Early! You have to 
     start over again."; 
     document.getElementById("container").style.background="yellow"; 
     //document.getElementById("container").onclick=function(){start();} 
     document.getElementById("container").onclick=function() 
    {lastClick();} 
    } 
    /*function where i use delay to calculate reflex*/ 
    function calculateReflex(){ 
     startTime=Date.now(); 
     document.getElementById("container").style.background="blue"; 
     document.getElementById("text").innerHTML="CLICK!"; 
     document.getElementById("container").onclick=function(){result();}  
    } 
    function result(){ 
     endTime=Date.now(); 
     difference=endTime-startTime; 
     document.getElementById("container").style.background="#fc3"; 
     document.getElementById("text").innerHTML="your reflex is 
"+difference/1000+"s"+"<br/>Click to restart"; 
     document.getElementById("container").onclick=function() 
{lastClick();} 
    } 
    /*For reload*/ 
    function lastClick(){ 
     window.location.reload(); 
    } 

</script> 

</body> 
</html> 
+0

を試してみてください。 – Teemu

答えて

0

を停止した場合、私は、私はちょうどほしいそれを修正する方法がわかりませんタイムアウトIDを格納する必要があります。 var timeoutId = setTimeout(...); 次に、clearTimeout(timeoutId)を使用して、タイムアウトが解除されてからtrigerredになります。

0

1および(https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/clearTimeout)[タイムアウトを停止]への唯一の文書化の方法があります。この

var myVar = setTimeout(function, milliseconds); 
clearTimeout(myVar); 
関連する問題