Проверьте, существует ли интервал, если так, очистите интервал и начните новый - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над датой обратного отсчета.Однако среда, в которой я работаю, не обновляет страницу при отправке, поэтому у меня проблема с созданием нескольких интервалов.Я полагаю, что если есть способ проверить, работает ли интервал, то очистить его и создать новый.Но я не уверен, как это сделать.Конечно, если есть лучшая стратегия, чем то, как у меня сейчас настроен мой код, то не стесняйтесь предоставить и это.

Мой код:

//get ready for a-togglin'
var finishedMessage = document.getElementById('finshedMessage');
//get dates value
var dateValue = document.getElementById('dateInput').innerText;

var dateEntered = new Date(dateValue);

//set the date we're counting down too
var targetDate = new Date(dateEntered).getTime();

//Update the countdown every second
var countInterval = setInterval(function() {
  var now = new Date().getTime();

  //get time remaining from now
  var timeRemaining = targetDate - now;

  //time calculations : days, hours, minutes and seconds
  var days = Math.floor(timeRemaining / (1000 * 60 * 60 * 24));
  var hours = Math.floor((timeRemaining % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((timeRemaining % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((timeRemaining % (1000 * 60)) / 1000);

  //When the countdown is finished, report back completion text
  if (timeRemaining <= 0 || NaN) {
    finishedMessage.style.display = "inline-block";
    clearInterval(countInterval);
  } else {
    //if day is over a year count the years remaining if no years just count       days
    if (days > 365) {
      var years = Math.floor(days / 365);
      days = days % 365;
      document.getElementById("report").innerHTML = years + "Y " + days + "D " + hours + "H " + minutes + "M " + seconds + "s ";
    } else {
      //report the remaining time to report div
      document.getElementById("report").innerHTML = days + "D " + hours + "H " + minutes + "M " + seconds + "s ";
    }
  }
}, 1000);

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Боюсь, что нет способа очистить все объявленные интервалы без возврата значения из них.Но вы можете сохранить ссылку на глобальный объект window при первом его запуске, поэтому вы можете сбросить его, когда захотите:

if (window.countInterval) clearInterval(window.countInterval)
window.countInterval = setInterval(function () {
  /* your code here */
})
0 голосов
/ 19 сентября 2018

Не является ошибкой вызов clearInterval, если идентификатор интервала уже остановлен.Таким образом, вы можете сделать только

clearInterval(intervalId);
intervalId = setInterval(.....);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...