在这种情况下,如何停止javascript中的setTimeout函数?
我正在尝试只使用js构建一个反应计时器,但每当我一开始点击,我的setTimeout似乎就不起作用了。如果我不提前单击,问题就不会发生。只需要解决earlyClick问题。请帮忙在这种情况下,如何停止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
<!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);
这是唯一一种有文件证明的方法。