Javascript Pomodoro定时器:变量值变为';楠';
我正试着做一个像波莫多罗钟一样的钟。秒值随机变为NaN,然后在启动“中断”后恢复正常Javascript Pomodoro定时器:变量值变为';楠';,javascript,jquery,Javascript,Jquery,我正试着做一个像波莫多罗钟一样的钟。秒值随机变为NaN,然后在启动“中断”后恢复正常 $('#circle a').click(function() { var timer = $('.time > span').html(); timer = timer.split(':'); var minutes = timer[0]; //Value of minutes var seconds = timer[1]; //Value of seconds va
$('#circle a').click(function() {
var timer = $('.time > span').html();
timer = timer.split(':');
var minutes = timer[0]; //Value of minutes
var seconds = timer[1]; //Value of seconds
var settimer = setInterval(function() {
seconds -= 1;
console.log(seconds);
if (seconds < 0 && minutes != 0) {
minutes -= 1;
minutes = String(minutes);
seconds = 59;
} else if (seconds < 10 && seconds.length != 2)
seconds = '0' + seconds;
if (minutes < 10 && minutes.length < 2)
minutes = '0' + minutes;
$('.time > span').html(minutes + ':' + seconds);
//Start break when session is completed
if (minutes == 0 && seconds == 0) {
$('.upper').find('h1').text('BREAK');
var time = $('#break').find('span').text();
$('.time > span').html('0' + time + ':00');
$('#circle a').trigger("click"); //Start timer for break
}
}, 1000);
});
$('#圈a')。单击(函数(){
var timer=$('.time>span').html();
timer=timer.split(“:”);
var minutes=计时器[0];//分钟值
var seconds=计时器[1];//秒的值
var settimer=setInterval(函数(){
秒-=1;
console.log(秒);
如果(秒<0和分钟!=0){
分钟-=1;
分钟=字符串(分钟);
秒=59;
}否则如果(秒<10&&seconds.length!=2)
秒='0'+秒;
如果(分钟<10和分钟长度<2)
分钟='0'+分钟;
$('.time>span').html(分钟+':'+秒);
//会话完成后开始中断
如果(分钟=0和秒=0){
$('.upper')。查找('h1')。文本('BREAK');
变量时间=$('#break').find('span').text();
$('.time>span').html('0'+time+':00');
$('#圈出a')。触发器(“单击”);//启动中断计时器
}
}, 1000);
});
这是代码笔的链接
如何解决NaN问题?
有没有更好的方法来实现这一点?代码$(“#圈a”)。触发器(“单击”)//中断启动计时器
递归调用最初执行的函数。此调用在原始计时器进行时启动新计时器
执行新计时器时,原始计时器的seconds
值变为NaN
。由于两个计时器,second
有两个值。原始计时器中的seconds
值导致出现无法解释的NaN
注意:两个计时器始终同时运行
最简单的修复方法是在启动新计时器之前停止当前计时器
这是更新后的代码
$('#circle a').click(function() {
var timer = $('.time > span').html().split(':');;
var minutes = Number(timer[0]),
seconds = Number(timer[1]);
var settimer = setInterval(function() {
seconds -= 1;
if (seconds < 0 && minutes != 0) {
minutes -= 1;
seconds = 59;
} else if (seconds < 10 && seconds.length != 2)
seconds = '0' + seconds;
if (minutes < 10 && minutes.toString().length < 2)
minutes = '0' + minutes;
$('.time > span').html(minutes + ':' + seconds);
if (minutes == 0 && seconds == 0) {
clearInterval(settimer); //Stop the current timer
var upper_text = $('.upper').find('h1');
var time;
if (upper_text.text() == 'BREAK') {
upper_text.text('Session');
time = $('#session').find('span').text();
} else {
upper_text.text('BREAK');
time = $('#break').find('span').text();
}
$('.time > span').html(time + ':00');
$('#circle a').trigger("click"); //Start new timer
}
}, 1000);
});
$('#圈a')。单击(函数(){
var timer=$('.time>span').html().split(':');;
var分钟=数量(计时器[0]),
秒=数字(计时器[1]);
var settimer=setInterval(函数(){
秒-=1;
如果(秒<0和分钟!=0){
分钟-=1;
秒=59;
}否则如果(秒<10&&seconds.length!=2)
秒='0'+秒;
if(分钟<10&&minutes.toString().length<2)
分钟='0'+分钟;
$('.time>span').html(分钟+':'+秒);
如果(分钟=0和秒=0){
clearInterval(settimer);//停止当前计时器
var upper_text=$('.upper').find('h1');
var时间;
如果(上_text.text()=='BREAK'){
上_text.text(“会话”);
时间=$(“#会话”).find('span').text();
}否则{
上_text.text('BREAK');
时间=$('#break')。查找('span')。文本();
}
$('.time>span').html(time+':00');
$('#圈出a')。触发器(“单击”);//启动新计时器
}
}, 1000);
});
一些提示:在没有第二个参数(10
)的情况下,不要使用parseInt
。使用.toString()
代替字符串(
…)
。全程使用数字:var分钟=数字(计时器[0]),秒=数字(计时器[1])
,使用.html
函数编写新计时器时,仅追加前导的0
或转换为字符串。@Xufox感谢您的输入。修复了代码。@Xufox我应该在解决问题后删除该问题吗?我是个新手。因此,请提出建议。@Ibrahim So的目的是为comunity发布的问题提供一个未来参考,以便有助于解决开发人员的问题,因此您必须让您的问题存在以供将来参考。@Xufox将您的评论转换为答案不是更好,因为它回答了问题?