Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这种情况下,如何停止javascript中的setTimeout函数?_Javascript_Settimeout - Fatal编程技术网

在这种情况下,如何停止javascript中的setTimeout函数?

在这种情况下,如何停止javascript中的setTimeout函数?,javascript,settimeout,Javascript,Settimeout,我正在尝试只使用js构建一个反应计时器,但每当我一开始点击,我的setTimeout似乎就不起作用了。如果我不提前单击,问题就不会发生。只需要解决earlyClick问题。请帮忙 <!DOCTYPE html> <html> <head> <title>Reflex Calculator</title> <link rel="stylesheet" type="text/css" href="reflexCalcu

我正在尝试只使用js构建一个反应计时器,但每当我一开始点击,我的setTimeout似乎就不起作用了。如果我不提前单击,问题就不会发生。只需要解决earlyClick问题。请帮忙

<!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";

反射计算器
单击开始。
变量开始时间、结束时间、差异;
/*设置延迟量*/
var RandomNumberBetween 2和19=数学地板(数学随机()*20)+2;
函数delay1(){
var秒数=2和19/5之间的随机数;
返回秒数;
}
var time=delay1().toFixed(3);
/*节目开始*/
document.getElementById(“容器”).onclick=function(){
firstClick();}
/*反射计时器以初始颜色绿色启动*/
函数firstClick(){
document.getElementById(“容器”).style.background=“红色”/*绿色*/
document.getElementById(“text”).innerHTML=“等到蓝色”;
这就是主要问题发生的地方,但我不知道如何解决它,我只是想,如果我提前单击,运行earlyClick函数并停止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>
if(document.getElementById(“container”).clicked)earlyClick();
else设置超时(calculateReflex,时间*1000);
}
函数earlyClick(){
document.getElementById(“text”).innerHTML=“太早了!您必须
重新开始。”;
document.getElementById(“容器”).style.background=“黄色”;
//document.getElementById(“容器”).onclick=function(){start();}
document.getElementById(“容器”).onclick=function()
{lastClick();}
}
/*使用延迟计算反射的函数*/
函数calculateReflex(){
startTime=Date.now();
document.getElementById(“容器”).style.background=“蓝色”;
document.getElementById(“text”).innerHTML=“单击!”;
document.getElementById(“容器”).onclick=function(){result();}
}
函数结果(){
endTime=Date.now();
差异=结束时间开始时间;
document.getElementById(“容器”).style.background=“#fc3”;
document.getElementById(“text”).innerHTML=“您的反射是
“+差异/1000+”s“+”
单击以重新启动”; document.getElementById(“容器”).onclick=function() {lastClick();} } /*换装*/ 函数lastClick(){ window.location.reload(); }
要停止设置超时,您需要在创建超时时存储超时标识符:
var timeoutId=setTimeout(…)
然后使用clearTimeout(timeoutId)
在触发超时之前清除超时。

试试这个

var myVar = setTimeout(function, milliseconds);
clearTimeout(myVar);

这是唯一一种有文件证明的方法。