Javascript 计时器到达零时不结束

Javascript 计时器到达零时不结束,javascript,timer,intervals,countdown,Javascript,Timer,Intervals,Countdown,我一直在研究这个javascript计时器,不明白为什么它在小时、分钟和秒等于零时不停止 代码: 问题似乎是这一部分的逻辑 if(s == 0 ){ if(m == 0){ h=h-1; // what if h is also 0 here?? this would set it negative s=59; m=59; if(h == 0){ clearInterval(counter); } 我

我一直在研究这个javascript计时器,不明白为什么它在小时、分钟和秒等于零时不停止

代码:


问题似乎是这一部分的逻辑

 if(s == 0 ){
    if(m == 0){
      h=h-1;   // what if h is also 0 here??   this would set it negative
      s=59;
      m=59;
      if(h == 0){
        clearInterval(counter);
      }

我认为你应该尽快做你的
如果(h==0)
检查。。。在你减少数值之前。因此,您可能希望使用
if(s==0&&m==00&&h==0)
启动if-else块,并使用它清除间隔。如果所有值都已为零,则您不想再更改任何值。

我在这里看到的问题是,当所有时间变量(时间变量是指
h
m
s
设置为零时,您将
h
变量减1:

if(s == 0 ) {
  if(m == 0) {
      h=h-1;
      s=59;
      m=59;
// more code goes here
因此
h
将为
-1
,计时器将永不停止。

我能建议的最好方法是完全重写计时器,在这里只使用几秒钟。每次调用
timer
函数时,检查
s
是否等于零-如果等于零,则停止计时器。否则,将
s
减1。要更新
#timer
元素的内部HTML,可以重新计算小时数,每次调用
timer
方法都需要几分钟和几秒钟-此解决方案将比嵌套条件语句链更易于理解和维护。

我认为计数器上正好有一小时后,计数器会停止一秒钟。(0:59:59)这是因为你从HB集s到59 c集m到59减去1。如果你把这三行注释掉,并将s设置为初始值10,而不是1800,计时器在10秒后停止。我得到了你说的第一部分。但是为了显示小时、分钟和秒,你是否建议我每秒计算小时、分钟和秒?@crm是的,这就是我的建议。
if(s == 0 ) {
  if(m == 0) {
      h=h-1;
      s=59;
      m=59;
// more code goes here