Проблема с отсчетом setInterval в Javascript

77
21 сентября 2019, 23:30

у меня такой вопрос: почему, для того, чтобы отсчет шел до 0, нужно i = -2(Естественно когда i = 0, отсчет идет до 2). Вот код:

let output = document.getElementById('output'); 
let i = 9; 
let id; 
 
id = setInterval(function() { 
  output.innerHTML = i; 
  i--; 
  if (i == -2) { 
    output.innerHTML = 'Отсчёт завершен.'; 
    clearInterval(id); 
  } 
}, 300);
<div id='output'>10</div>

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

Answer 1

Потому что, если Вы хотите видеть "0" в течение интервала таймера (как все остальные числа), то Вам нужно, чтобы таймер сработал еще раз со значением i на входе в него -1. В этот момент output.innerHTML становится "-1", но еще не успевает отрисоваться. Потом i уменьшается еще на единицу i--;и становится -2. A output.innerHTML меняется на "Отсчёт завершен.".

Answer 2

Измени логику, будет легче понять код:

id = setInterval(function() {
  output.innerHTML = i;
  if (i < 0) {
    output.innerHTML = 'Отсчёт завершен.';
    clearInterval(id);
  }
  i--;
}, 300);
READ ALSO
Добавить слушателя к div в цикле

Добавить слушателя к div в цикле

Хочу отобразить онлайн,оффлайн пользователей чата и приписать определенную логику при нажатии на одного из такого пользователя(div)Есть JSONArray,читаю...

130
можно ли сделать сменяющийся статус без js?

можно ли сделать сменяющийся статус без js?

вот есть js, который позволяет менять строку на какую-то другую строку, а можно достичь таких же успехов на css?

92
пару вопросов по решению к задаче [дубликат]

пару вопросов по решению к задаче [дубликат]

На данный вопрос уже ответили:

101
&ldquo;Route.post() requires a callback function but got a Object&rdquo; при использовании multer

“Route.post() requires a callback function but got a Object” при использовании multer

При вызове маршрута: routerpost('/', upload, controller

108