Почему таймер работает не так, как ожидалось?

.equals() сравнивает данные в классе (при условии, что функция реализована). == сравнивает местоположения указателя (расположение объекта в памяти).

== возвращает true, если оба объекта (NOT TALKING OF PRIMITIVES) указывают на экземпляр SAME. .equals() возвращает true, если два объекта содержат одни и те же данные equals() Versus == в Java

Это может вам помочь.

1
задан deceze 17 January 2019 в 09:41
поделиться

4 ответа

Поскольку вам нужно очистить его, используя clearInterval()...!

Посмотрите на этот код в качестве ссылки:

https://www.w3schools.com/jsref/tryit .asp? filename = tryjsref_win_clearinterval

var myVar = setInterval(myTimer, 1000);

function myTimer() {
  var d = new Date();
  var t = d.toLocaleTimeString();
  document.getElementById("demo").innerHTML = t;
}

function myStopFunction() {
  clearInterval(myVar);
}
<!DOCTYPE html>
<html>

<body>
  <p>A script on this page starts this clock:</p>
  <p id="demo"></p>
  <button onclick="myStopFunction()">Stop time</button>
</body>

</html>

0
ответ дан Alireza 17 January 2019 в 09:41
поделиться

SetInterval выполняет действие несколько раз в указанный интервал.

В вашем случае вы должны использовать setTimeOut.

 var timerConst; 
 function timer() {

 if(timerConst) clearTimeOut( timerConst); // this will clear the previous timeout.

  timerConst = setTimeOut(function() {
    console.log("Time up");
    document.getElementById("timer").innerHTML = "Time Up!";
   }, 3000);}

Это отобразит текст через 3 секунды.

https://www.w3schools.com/jsref/met_win_settimeout.asp

0
ответ дан Sathya P 17 January 2019 в 09:41
поделиться

При запуске интервала он будет длиться вечно, если вы его не очистите.

Ваш первый интервал, который был запущен при первом вызове, все еще работает в фоновом режиме. Это хорошо видно на примере ниже.

Вы должны использовать clearInterval()

function timer() {
  var t = 3;

  console.log("timer started t = " + t);


  setInterval(function() {
    if (t >= 0) {
      document.getElementById("timer").innerHTML = t;
      console.log(t);
      t--;
    } else {
      console.log("Time up");
      document.getElementById("timer").innerHTML = "Time Up!";
    }
  }, 1000);


  console.log("timer stopped t = " + t);
}
<html>

<head>

  <script src=timer.js></script>

</head>

<body>


  <input type=Reset onclick=timer()> <br>

  <hi id="timer"></hi> <br>

</body>

</html>

0
ответ дан Weedoze 17 January 2019 в 09:41
поделиться

Каждый раз, когда вы нажимаете кнопку сброса , создается новый интервал. Вот почему, когда вы нажмете кнопку Reset еще раз, ваш вывод на консоль станет беспорядочным.

Функция setInterval возвращает идентификатор созданного интервала, вы можете сохранить его в глобальной переменной, например window.timerInterval .

Внутри функции таймера сначала запустите clearInterval (window.timerInterval) . Поэтому, если есть какие-либо интервалы, созданные и сохраненные в window.timerInterval , clearInterval (window.timerInterval) обязательно прекратит его запуск.

Проверьте и запустите приведенный ниже рабочий пример:

function timer() {
  var t = 3;

  console.log("timer started t = " + t);

  clearInterval(window.timerInterval);

  window.timerInterval = setInterval(function() {
    if (t >= 0) {
      document.getElementById("timer").innerHTML = t;
      console.log(t);
      t--;
    } else {
      document.getElementById("timer").innerHTML = "Time Up!";
    }
  }, 1000);


  console.log("timer stopped t = " + t);
}
<html>

<head>

  <script src=timer.js></script>

</head>

<body>


  <input type=Reset onclick=timer()> <br>

  <hi id="timer"></hi> <br>

</body>

</html>

0
ответ дан yigitusta 17 January 2019 в 09:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: