Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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倒计时会多次启动_Javascript_Timer_Setinterval - Fatal编程技术网

当链接被多次单击时,javaScript倒计时会多次启动

当链接被多次单击时,javaScript倒计时会多次启动,javascript,timer,setinterval,Javascript,Timer,Setinterval,我是JavaScript新手,希望实现以下功能: 通过点击网站上的链接,将启动一个倒计时15分钟的计时器。如果只单击一次链接,则效果良好。但是,如果再次单击链接(或另一个链接),将并行显示两个(或更多)倒计时。 我尝试了两种不同的方法:第一种是专注于Date()对象的代码,第二种是处理连续减少1秒的变量的版本。这两个代码(当然)都基于setInterval()函数 在第一种情况下,stopZeit的日志显示每次单击链接时,都会创建一个新值stopZeit。在第二种情况下,console.log(

我是JavaScript新手,希望实现以下功能:

通过点击网站上的链接,将启动一个倒计时15分钟的计时器。如果只单击一次链接,则效果良好。但是,如果再次单击链接(或另一个链接),将并行显示两个(或更多)倒计时。 我尝试了两种不同的方法:第一种是专注于
Date()
对象的代码,第二种是处理连续减少1秒的变量的版本。这两个代码(当然)都基于
setInterval()
函数

在第一种情况下,
stopZeit
的日志显示每次单击链接时,都会创建一个新值
stopZeit
。在第二种情况下,
console.log(timerLaenge)
显示
30
,无论单击链接的频率有多高,但仍有多个计时器启动

以下是我的两次尝试:

第一版:
功能定时器(stopZeit)//stopZeit=现在的时间加上15分钟-必须是固定的,否则每次调用函数时都会实现
{
控制台日志(stopZeit);
var countdown=setInterval(函数()
{
var jetzt=new Date().getTime();//现在
var differencez=stopZeit-jetzt;//时差
var minuten=数学楼层((差分%(1000*60*60))/(1000*60));//计算剩余分钟数
var sekunden=Math.floor((differencez%(1000*60))/1000);//计算剩余秒数
document.getElementById(“倒计时”).innerHTML=minuten+'m'+sekunden+'s';//记下当前时差
if(differencez<0)//检查计时器是否过期
{
清除间隔(倒计时);
document.getElementById(“倒计时”).innerHTML='Timer abgelaufen!';
}
},1000);
}



欢迎你,亚历克赛

问题是
var倒计时
发生在
timer()
的范围内,并且
倒计时
在每次单击时都会被覆盖。解决办法是把它存放在外面

我还添加了一个
cancelTimer()
,它将停止倒计时,希望将来对您有所帮助)

var倒计时;
函数计时器()
{
如果(倒计时){
返回;
}
timerLaenge=30;//计时器的长度
控制台日志(timerLaenge);
倒计时=设置间隔(函数()
{
TIMERLANGE=TIMERLANGE-1;
document.getElementById(“倒计时”).innerHTML=timerLaenge+'s';
如果(时间间隔<0)
{
清除间隔(倒计时);
document.getElementById(“倒计时”).innerHTML='Timer abgelaufen!';
}
},1000);
}
函数cancelTimer()
{
如果(倒计时){
清除间隔(倒计时);
倒计时=空;
}
}






要在用户每次单击链接时重置计时器,可以在启动新计时器之前先清除现有计时器,使用

var倒计时;//将此变量上移一个范围
函数计时器(){
timerLaenge=30;//计时器的长度
if(倒计时)clearInterval(倒计时);//在此处清除间隔
倒计时=设置间隔(函数(){
timerLaenge=timerLaenge-1;
document.getElementById(“倒计时”).innerHTML=timerLaenge+'s';
如果(时间间隔<0){
清除间隔(倒计时);
document.getElementById(“倒计时”).innerHTML='Timer abgelaufen!';
}
}, 1000);
}




setInterval函数返回一个id,可用于清除间隔。您正在尝试在间隔返回id之前清除它。我认为您需要全局存储倒计时id,以便在设置新间隔之前清除它。非常感谢,此版本也很完美!