微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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>

解决方法

您在每次 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>

,

解决了!即使我不知道没有代码的分钟是如何运行的 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>
,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。