javascript - `document.getElementById` 是否破坏了该功能?

标签 javascript timer

所以我正在研究番茄计时器,但无法弄清楚我的 JS 做错了什么。该项目的概述在这里:http://codepen.io/Ohillio/pen/wMoNWy

但是我遇到问题的代码的具体部分是:

// global variables
var min = 0;
var sec = 0;


function tick() {
 alert("Counter Started");
 sec = 59;
 min--;
 document.getElementById("timer").innerHTML = min + ":" + sec;
 do {
  sec--
  document.getElementById("timer").innerHTML = min + ":" + sec;
  setTimeout(donothing,500);
} 
  while (sec != 0);
}

问题是,它似乎在第一次执行后就结束了该函数。我希望秒数减少到 0,但现在它的计算结果只是 58。

document.getElementById 是否会破坏该功能?

最佳答案

使用 setInterval 可能是您尝试执行的操作的更好解决方案。一旦你达到0,它就会更准确,更容易短路。另外,我更喜欢以秒为单位保留总时间,仅使用分钟来显示。我整理了一个示例供您查看。

<script>
  var interval;
  var totalSeconds = 1500;

  function tick() {
    totalSeconds--;
    min = Math.floor(totalSeconds / 60);
    sec = totalSeconds % 60;
    document.getElementById('timer').innerHTML = min + ':' + sec;
    if (0 >= totalSeconds) {
        clearInterval(interval);
    }
  }
  interval = setInterval(tick, 1000);
</script>

希望这有帮助,祝你好运!

关于javascript - `document.getElementById` 是否破坏了该功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34551900/

相关文章:

javascript - 使用 Parse 进行 Facebook 登录,但我得到 --https ://api. parse.com/1/users 404-- 刷新 3 次后

c - 在 POSIX 中以微秒粒度调度事件

Java程序签到定时器

timer - 哪个 CPU 增加 SMP 中的 jiffies?

C# 在 X 秒后执行操作

javascript/regex 忽略双引号中的分号

javascript - PHP 到 JS : printing js variable (like PHP echo) compatible with AJAX responseText?

JavaScript:用表单字段填充数组

javascript - 相当于用数字键拼接一个对象

c++ - 在 deadline_timer 等待时使用 io_service::post (boost)