Я пишу игру, используя HTML
, CSS
и JavaScript
. И я создал функцию, которая отсчитывает p-тег в HTML-коде, но она вычитает только одно число каждый раз, когда функция выполняется, поэтому мне нужно выполнять эту функцию много раз, и когда обратный отсчет обнуляется, игра заканчивается.
Я пытался ввести цикл for, но цикл for ничего не делает.
Моя функция JavaScript
:
function time() {
for (i=0;i<30;i++) {
var enem = document.getElementById("enem");
var timer = document.getElementById("timer1").innerHTML;
var timer = parseInt(timer);
var actime = timer - 1;
sleep(1000).then(() => {
timer = document.getElementById("timer1").innerHTML = actime;
if (timer===0) {
enem.parentNode.removeChild(enem);
window.location.href = ('success.html');
}
})
}
}
Я, кроме результата функции time(), будет менять p-тег каждые 1 секунду 30 раз, но он меняется только один раз.
Я новичок, можете объяснить?
Вы ищете setInterval()
, то есть то, как Javascript выполняет определенное действие каждый определенный период времени.
Код, который вы разместили, не будет работать из-за неблокирующего характера Javascript, он запланирует вызов функции сна и перейдет к следующему циклу.
Спасибо, так что я должен узнать больше о функции setInterval()?
Да, вам понадобится несколько минут, чтобы понять его использование и изучить его синтаксис. Затем он должен заменить цикл for, и больше не нужно спать. Извините, что не набрал код, но я в телефоне. Позвольте мне, как это работает.
Вы должны использовать для этого функцию setInterval Javascript.
(function(){
var n = 30;
var tm = setInterval(countDown,1000);
var enem = document.getElementById("enem");
var timer = document.getElementById("timer1");
function countDown(){
n--;
if (n == 0){
clearInterval(tm);
enem.parentNode.removeChild(enem);
window.location.href = ('success.html');
}
timer.innerHTML = n;
}})();
<p id = "enem"></p>
<p id = "timer1"></p>
Он работает, но когда он достигает 1, обратный отсчет прекращается.
вы можете использовать асинхронную функцию или нет?