繁体   English   中英

为什么我的倒数计时不会在0停止?

[英]Why is my countdown not stopping at 0?

 //Not finished -- disregard function evaluate() { var cdate = new Date(); var cday = cdate.getDay(); var chr = cdate.getHours(); var cmin = cdate.getMinutes(); var csec = cdate.getSeconds(); //Luni if (cday === 1) { countDown(5, 0, 0, 100, "countdown") } //Marti sau Miercuri if ((cday === 2) || (cday === 3)) { countDown(5, 0, 0, 0, "countdown") } //Joi if (cday === 4) { countDown(0, 0, 0, 100, "countdown") } //Vineri sau Sambata if ((cday === 5) || (cday === 6)) { countDown(5, 0, 0, 0, "countdown") } //Duminica if (cday === 0) { countDown(5, 0, 0, 0, "countdown") } } function countDown(sec, min, hour, day, elem) { var element = document.getElementById(elem); element.innerHTML = "Urmatorul eveniment este in " + day + " zile " + hour + " ore " + min + " minute " + sec + " secunde."; if ((sec === 0) && (min > 0)) { sec = 59; min = min - 1; } if ((sec === 0) && (min === 0) && (hour > 0)) { sec = 59; min = 59; hour = hour - 1; } if ((sec === 0) && (min === 0) && (hour === 0) && (day > 0)) { sec = 59; min = 59; hour = 23; day = day - 1; } if ((min < 0) && (day > 0)) { min = 59; day = day - 1; } if ((min < 0) && (day === 0) && (day > 0)) { min = 59; hour = 23; day = day - 1; } if ((hour < 0) && (day > 0)) { hour = 23; day = day - 1; } //Here is the deadline if if ((day === 0) && (hour === 0) && (min === 0) && (sec < 0)) { clearTimeout(timer); elem.innerHTML = "Evenimentul este in decurs!"; } sec--; var timer = setTimeout('countDown(' + sec + ',' + min + ',' + hour + ',' + day + ',"' + elem + '")', 1000); } evaluate(); 
 <p id="countdown"></p> 

我的JavaScript无法正常工作。 当所有值都达到0时,计时器应清除。

我的目标是:评估日期->显示->重置。

if ((day === 0) && (hour === 0) && (min === 0) && (sec < 0)) {
    clearTimeout(timer);
}

有人可以帮我吗? 我已经设置了一个代码段。 先感谢您。

您需要将条件更改为sec <= 0并减少else语句中的秒数

if ((day === 0) && (hour === 0) && (min === 0) && (sec <= 0)) {
    clearTimeout(timer);
    elem.innerHTML = "Evenimentul este in decurs!";
  }else{
    sec--;
    var timer = setTimeout('countDown(' + sec + ',' + min + ',' + hour + ',' + day + ',"' + elem + '")', 1000);
}

清除计时器并输出消息(带有return )后,您需要退出该功能。

消息也应该输出到element而不是elem元素。

最后, 计时器值应在函数调用之间保留,因此应使其成为全局值。 只要计时器为0,它将起作用,但是,如果您有更多的计时器,则分配的计时器值将为非零值,除非将其保留在函数外部,否则将无法清除它。

这有效:

 var timer; //Not finished -- disregard function evaluate() { var cdate = new Date(); var cday = cdate.getDay(); var chr = cdate.getHours(); var cmin = cdate.getMinutes(); var csec = cdate.getSeconds(); //Luni if (cday === 1) { countDown(5, 0, 0, 100, "countdown") } //Marti sau Miercuri if ((cday === 2) || (cday === 3)) { countDown(5, 0, 0, 0, "countdown") } //Joi if (cday === 4) { countDown(0, 0, 0, 100, "countdown") } //Vineri sau Sambata if ((cday === 5) || (cday === 6)) { countDown(5, 0, 0, 0, "countdown") } //Duminica if (cday === 0) { countDown(5, 0, 0, 0, "countdown") } } function countDown(sec, min, hour, day, elem) { var element = document.getElementById(elem); element.innerHTML = "Urmatorul eveniment este in " + day + " zile " + hour + " ore " + min + " minute " + sec + " secunde."; //Here is the deadline if if ((sec === 0) && (min > 0)) { sec = 59; min = min - 1; } if ((sec === 0) && (min === 0) && (hour > 0)) { sec = 59; min = 59; hour = hour - 1; } if ((sec === 0) && (min === 0) && (hour === 0) && (day > 0)) { sec = 59; min = 59; hour = 23; day = day - 1; } if ((min < 0) && (day > 0)) { min = 59; day = day - 1; } if ((min < 0) && (day === 0) && (day > 0)) { min = 59; hour = 23; day = day - 1; } if ((hour < 0) && (day > 0)) { hour = 23; day = day - 1; } if ((day === 0) && (hour === 0) && (min === 0) && (sec < 0)) { clearTimeout(timer); element.innerHTML = "Evenimentul este in decurs!"; return; } sec--; timer = setTimeout('countDown(' + sec + ',' + min + ',' + hour + ',' + day + ',"' + elem + '")', 1000); } evaluate(); 
 <p id="countdown"></p> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM