javascript - 单击按钮时暂停和播放 setInterval()

标签 javascript jquery timer

我正在用 javascript 制作一个计时器,但在启动和停止计时器时遇到了一些麻烦,而计时器在再次启动时又没有向前跳跃。我已经输入了一个 bool 值(isPaused)来暂停和播放setInterval,但是当我播放时,无论暂停的时间长度,计时器都会跳跃。我尝试在播放时调用 setInterval 函数,并尝试重置确定倒计时多长时间(timeLeft)的变量。当我暂停并播放它时, timeLeft 变量是相同的,所以我不确定为什么它会这样跳来跳去。

我的 HTML:

<div class="container">
  <div class="row">
    <div class="col-xs-6">
      <button id="start-button">Start Timer</button>
      <button id="pause-button">Pause Timer</button>
      <button id="play-button">Play Timer</button>
    </div>
  </div>
  <div class="row">
    <div class="col-xs-6">
      <span id="display-minutes"></span>
      <span id="display-seconds"></span>
      <span id="display-milli"></span>
    </div>
  </div>
</div>

和我的 JavaScript:

var minutes = 25;
var seconds = 0;
var milliseconds = 0;

var endTime = 0;
var timeLeft = 0;
var dateAtPause = 0;
var isPaused = false;

$('#display-minutes').html(minutes);
$('#display-seconds').html(seconds);
$('#display-milli').html(milliseconds);

//calculate time remaining between now and endTime
function timeRemaining() {
  timeLeft = Date.parse(endTime) - Date.parse(newDate());
  var milliseconds = Math.floor(timeLeft % 1000);
  var seconds = Math.floor((timeLeft/1000) % 60);
  var minutes = Math.floor(timeLeft/1000/60);
  var total = timeLeft;
  return {
    'milliseconds': milliseconds, 
    'seconds': seconds, 
    'minutes': minutes,
    'total': total, 
  };
}

function updateClock() {
  if (!isPaused) {
    var time = timeRemaining();
    $('#display-minutes').html(time.minutes);
    $('#display-seconds').html(time.seconds);
    $('#display-milli').html(time.milliseconds);
    if (time.total <= 0) {
      clearInterval(timeInterval);
    };
  };
};

$('#start-button').click(function() {
  //set time (var minutes) minutes from now
  var startTime = new Date();
  endTime = new Date(startTime.setMinutes(startTime.getMinutes() + minutes));

  updateClock();
  var timeInterval = setInterval(updateClock, 1000);

});

$('#pause-button').click(function() {
  isPaused = true;
  dateAtPause = new Date();
  console.log(timeLeft);
});

$('#play-button').click(function() {
  isPaused = false;
  var timeInterval = setInterval(updateClock, 1000);
  console.log(timeLeft);
});

最佳答案

当您暂停/播放时,前一个计时器不会被清除,结束时间也不会改变。这就是为什么即使在暂停期间剩余时间也会继续减少。

点击播放后,您将多一个计时器,因此您可以不断增加正在运行的计时器的数量。

此外,updateClock 中的 clearInterval 对其他函数中本地创建的 timeInterval 变量没有任何作用。

关于javascript - 单击按钮时暂停和播放 setInterval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35093988/

相关文章:

java - 不能引用非最终变量和计时器

javascript - 像 facebook 商业页面一样使用内置的像 open-graph api 不使用 javascript sdk

javascript - 单击链接可放大图像

javascript - 一个准确的 Javascript 计时器

javascript - [] 如何附加事件监听器?

javascript - 询问用户是否确定,然后禁用按钮并提交表单

javascript - 在 Bootstrap 3 Accordion 中添加动态闭合面板

php - 如何将下拉列表中的值插入到 mysql 查询中以从数据库中检索数据

javascript - WebAudio 计时如何工作?使用 setInterval 是一个糟糕的解决方案吗?

C++ 游戏倒计时