Javascript 防止JS定时器溢出
我已经做了一个计时器从问题的最投票的答案。 问题是,当它达到0时,它将日期更改为第二天,并启动一个新的24小时计时器 Tl;博士 00:00:00->23:59:59,而不是永远停留在00:00:00 我当前的代码:Javascript 防止JS定时器溢出,javascript,ruby-on-rails,countdowntimer,Javascript,Ruby On Rails,Countdowntimer,我已经做了一个计时器从问题的最投票的答案。 问题是,当它达到0时,它将日期更改为第二天,并启动一个新的24小时计时器 Tl;博士 00:00:00->23:59:59,而不是永远停留在00:00:00 我当前的代码: function getTimeLeft() { var seconds_left = end_time - Math.floor(Date.now() / 1000); var time_left = new Date(seconds_left * 1000).toISO
function getTimeLeft() {
var seconds_left = end_time - Math.floor(Date.now() / 1000);
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
$('#test-time-left').text(time_left);
}
setInterval(getTimeLeft, 1000);
为了保持00:00:00,我想到了两种解决方法
首先(最好是imho)给出setInterval(getTimeLeft,1000)代码>在<代码>中,而
循环条件<代码>剩余秒数>=0。但我对此没有什么问题
:
while( seconds_left >= 0){
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
}
问题:
浪费资源,因为JS脚本仍在执行中
@编辑最终结果:
function getTimeLeft() {
var seconds_left = end_time - Math.floor(Date.now() / 1000);
if (seconds_left <= 0)
{
seconds_left = 0;
clearInterval(timer);
}
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
$('#test-time-left').text(time_left);
}
var timer = setInterval(getTimeLeft, 1000);
函数getTimeLeft(){
var seconds\u left=end\u time-Math.floor(Date.now()/1000);
如果(剩余秒数假设您想在剩余秒数等于0时停止计时器,您只需清除间隔:
function getTimeLeft() {
var seconds_left = end_time - Math.floor(Date.now() / 1000);
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
if(seconds_left === 0) {
clearInterval(timer); // clear the interval
}
$('#test-time-left').text(time_left);
}
var timer = setInterval(getTimeLeft, 1000); //save the timer in a variable
请注意,使用while循环的想法行不通:
JavaScript是单线程的,这意味着当while
循环运行时,间隔代码根本不会运行,因此会创建一个无限循环(可能会使浏览器崩溃).我同意Rick Hithcock所说的一切。下面是一个基于您的代码的示例,它将计时器设置为10秒,然后倒计时
var end_time = new Date();
end_time.setSeconds(end_time.getSeconds() + 10);
function getTimeLeft() {
var now = new Date();
var seconds_left = (end_time - now) / 1000;
if (seconds_left <= 1) {
clearInterval(timerID);
}
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
$('#test-time-left').text(time_left);
}
timerID = setInterval(getTimeLeft, 1000);
var end_time=新日期();
end_time.setSeconds(end_time.getSeconds()+10);
函数getTimeLeft(){
var now=新日期();
var seconds\u left=(结束时间-现在)/1000;
如果(还剩的秒数)是等值和等类型?我想在用户关闭浏览器时使用,间隔将自动取消。使用interval应该可以,但日期会更改,但无论如何一切正常。谢谢。
var end_time = new Date();
end_time.setSeconds(end_time.getSeconds() + 10);
function getTimeLeft() {
var now = new Date();
var seconds_left = (end_time - now) / 1000;
if (seconds_left <= 1) {
clearInterval(timerID);
}
var time_left = new Date(seconds_left * 1000).toISOString().substr(11, 8);
$('#test-time-left').text(time_left);
}
timerID = setInterval(getTimeLeft, 1000);