setInterval 不能连续工作并在第一次迭代后停止

时间:2021-03-13 20:05:55

标签: javascript html setinterval

开始是01:59。当我刷新页面时,它变成 01:58 并停止。它应该变成 01:59,然后是 01:58,然后是 01:57 等等。

function timer() {
  let time = 119,
    minutes = Math.floor(time / 60),
    seconds = time % 60;
  
  if (minutes < 10) {
    minutes = `0${minutes}`;
  }
  else if (seconds < 10) {
    seconds = `0${seconds}`;
  }
  
  if (seconds > 0) {
    seconds = seconds - 1;
  }
  else {
    clearInterval(SI);
  }
  
  document.getElementById('div').innerHTML = `${minutes}:${seconds}`;
}

let SI = setInterval(() => {
  timer();
}, 1000);
<div id="div"></div>

3 个答案:

答案 0 :(得分:0)

您在每次 time 迭代时都在休息 time() 变量。 将初始化移到函数外。

此外,您忘记在函数调用 time 后从 time-- 变量中删除 1 秒;

function timer() {
  
    let minutes = Math.floor(time / 60),
    seconds = time % 60;
  
  if (minutes < 10) {
    minutes = `0${minutes}`;
  }
  else if (seconds < 10) {
    seconds = `0${seconds}`;
  }
  
  if (seconds > 0) {
    time--;
  }
  else {
    clearInterval(SI);
  }
  
  document.getElementById('div').innerHTML = `${minutes}:${seconds}`;
}


let time = 119;
let SI = setInterval(() => {
  timer();
}, 1000);
<div id="div"></div>

答案 1 :(得分:0)

解决了!即使我不知道没有代码的分钟是如何运行的 O.o

let time=123;
function timer(){
    let minutes=Math.floor(time/60),
        seconds=time%60;
    /*if(minutes<10){
        minutes=`0${minutes}`;
    }if(seconds<10){
        seconds=`0${seconds}`;
    }*/
    if(time>0){
        time=time-1;
    }
    document.getElementById("div").innerHTML=`${minutes}:${seconds}`;
}
setInterval(()=>{
    timer();
},1000);
<div id="div"></div>

答案 2 :(得分:0)

定时器组件的脚本应该是 setInterval(timer,1000)

相关问题