javascript - 带停止按钮的倒计时

标签 javascript html

我尝试构建一个倒计时器,它确实有效,但是当我更改代码以使其更具可读性时,并且当我添加停止按钮功能时,它出现了一些错误。我摆弄了很多,但我无法让它再次工作。 我遇到的问题是,倒计时从页面加载的时间开始,而不是从分配给“sessTime”的数字开始。 这是代码(我知道它很多,抱歉):

var startButton = document.getElementById('btnStart');
var stopButton = document.getElementById('btnStop');
var sessionTime = parseInt(document.getElementById('sessNum').innerHTML); //gets duration number
var sessLength = Date.parse(new Date()) + sessionTime * 60 * 1000;

startButton.onclick = function() {
  if (!sessTimer) { 
   startButton.value="Stop";
   var sessTimer = setInterval(runSess, 1000);
  }else{
    startButton.value="Start";
    clearInterval(sessTimer);   
  }
}; 

function runSess() {  
  var timeLeft = sessLength - Date.parse(new Date());
  var seconds = Math.floor((timeLeft / 1000) % 60);
  var minutes = Math.floor((timeLeft / 1000 / 60) % 60);
  var hours = Math.floor((timeLeft / (1000 * 60 * 60)) % 24);  

  document.getElementById("hours").innerHTML = ('0' + hours).slice(-2);
  document.getElementById("minutes").innerHTML = ('0' + minutes).slice(-2);
  document.getElementById("seconds").innerHTML = ('0' + seconds).slice(-2);

  if (timeLeft <= 0) {
    clearInterval(sessTimer);
  }
}

此代码是 codepen project 的一部分我的。也许上下文有助于回答这个问题。

提前致谢,非常感谢您的帮助。

最佳答案

您已在函数范围内声明了 sessTimer。

startButton.onclick = function() {
  if (!sessTimer) { 
   startButton.value="Stop";
   var sessTimer = setInterval(runSess, 1000);   

使用上面的代码,每次进入该函数时,sessTimer 都是未定义的,并且您声明一个新的。您可以执行以下操作:

var sessTimer = null;
startButton.onclick = function() {
  if (!sessTimer) { 
   startButton.value="Stop";
   sessTimer = setInterval(runSess, 1000);

  }else{
    startButton.value="Start";
    clearInterval(sessTimer);   
    sessTimer = null;
  }
}; 

进入您的功能,您还需要更改按钮:

  if (timeLeft <= 0) {
    startButton.value="Start";
    clearInterval(sessTimer);
  }

关于javascript - 带停止按钮的倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43735092/

相关文章:

javascript - 如何为循环创建数组

javascript - 如果 api 服务器已关闭,提醒用户服务器当前不可用的客户端的最佳做法是什么?

html - 页脚背景颜色占据了我的整个网页

css - 当 &lt;input/> 文本溢出时,iOS 6 中的页面移动

javascript - 在 AngularJS 中插入来自可信源的 iframe

javascript - 如何从一个 JSON 对象列表从另一个 JSON 对象列表分配值

javascript - JavaScript 中的 "new Number(...)"和 "Number(...)"有什么区别?

php - 在网站上创建自动旋转 "news"提要的最佳方式?

javascript - 使用Javascript问题对html表进行一些计算

javascript - 调整多个 Android 平板电脑屏幕的大小不起作用