Javascript停止倒计时

Javascript停止倒计时,javascript,countdown,Javascript,Countdown,我有一个倒计时在js,我不能添加一个技巧,我想 当计数结束时,它不会停止。负数开始,而不是我希望它停止在0一旦时间已经到期。我该怎么办 var counter = null; window.onload = function() { initCounter(); }; function initCounter() { // get count from localStorage, or set to initial value of 1000 coun

我有一个倒计时在js,我不能添加一个技巧,我想

当计数结束时,它不会停止。负数开始,而不是我希望它停止在0一旦时间已经到期。我该怎么办

  var counter = null;

  window.onload = function() {
    initCounter();
  };

  function initCounter() {
    // get count from localStorage, or set to initial value of 1000
    count = getLocalStorage('count') || 1000;
    counter = setInterval(timer, 1000); //1000 will  run it every 1 second
  }

  function setLocalStorage(key, val) {
    if (window.localStorage) {
      window.localStorage.setItem(key, val);
    }

    return val;
  }

  function getLocalStorage(key) {
    return window.localStorage ? window.localStorage.getItem(key) : '';
  }

  function timer() {
    count = setLocalStorage('count', count - 1);
    if (count == -1) {
      clearInterval(counter);
      return;
    }

    var seconds = count % 60;
    var minutes = Math.floor(count / 60);
    var hours = Math.floor(minutes / 60);
    minutes %= 60;
    hours %= 60;

    document.getElementById("countdown").innerHTML = hours +  " ore "  + minutes +  " min "   + seconds +  "  sec";
  }
更改此项:

if (count == -1) {
  clearInterval(counter);
  return;
}
为此:

if (count < 0) {
  clearInterval(counter);
  localStorage.removeItem('count');
  return;
}
if(计数<0){
清除间隔(计数器);
localStorage.removietem('count');
返回;
}
总是尽可能地严格你的条件,或者。实际上,您并不关心它是否等于
-1
。您关心它在
0
以下


在您的原始代码中,当页面在没有本地存储的情况下加载时,它会正常停止。但最后,您将localStorage设置为
-1
。刷新时,将其设置为
-2
计数-1
)并启动计数器进入负片。从未根据存储的
-1
值检查您的状况。

问题是您将
计数
-1
值一起放入
本地存储中

count = setLocalStorage('count', count - 1);
重新加载页面后,您不断从
-1
中减去
1
,得到
-2
,而您的条件
计数==-1
无法捕捉到该值。解决方案是在检查是否需要继续计时后,将下一个计数值放入
LocalStorage

<script type="text/javascript">

  let count = 0;
  let counter = null;

  window.onload = function() {
    initCounter();
  };

  function initCounter() {
    // get count from localStorage, or set to initial value of 1000
    count = Number(getLocalStorage('count')) || 5;
    counter = setInterval(timer, 1000); //1000 will  run it every 1 second
  }

  function setLocalStorage(key, val) {
    if (window.localStorage) {
     window.localStorage.setItem(key, val);
    }

    return val;
  }

  function getLocalStorage(key) {
    return window.localStorage ? window.localStorage.getItem(key) : '';
  }

  function timer() {
    const nextCount = count - 1
    if (nextCount < 0) {
      clearInterval(counter);
      return;
    }
    count = setLocalStorage('count', nextCount);

    const seconds = count % 60;
    let minutes = Math.floor(count / 60);
    let hours = Math.floor(minutes / 60);
    minutes %= 60;
    hours %= 60;

    document.getElementById("timer").innerHTML = hours +  " ore "  + minutes +  " min "   + seconds +  "  sec";
  }
 </script>

<div id="timer"></div>

让计数=0;
设计数器=null;
window.onload=函数(){
initCounter();
};
函数initCounter(){
//从localStorage获取计数,或设置为初始值1000
count=Number(getLocalStorage('count'))| | 5;
计数器=设置间隔(计时器,1000);//1000将每1秒运行一次
}
函数setLocalStorage(键,val){
if(window.localStorage){
window.localStorage.setItem(key,val);
}
返回val;
}
函数getLocalStorage(键){
return window.localStorage?window.localStorage.getItem(键):“”;
}
函数计时器(){
const nextCount=count-1
如果(下一个计数<0){
清除间隔(计数器);
返回;
}
count=setLocalStorage('count',nextCount);
常数秒=计数%60;
让分钟=数学楼层(计数/60);
让小时数=数学楼层(分钟/60);
分钟%=60;
小时%=60;
document.getElementById(“计时器”).innerHTML=hours+“ore”+minutes+“min”+seconds+“sec”;
}

希望能有所帮助:)

是否实际执行了
clearInterval
?您是否尝试过检查
count<0
而不是
count==-1
?这可能是浮点值的舍入错误不客气,请不要忘记向上投票&如果答案对您有帮助,请接受:)