Здравствуйте, вопрос у меня такой, ну изменять позицию экземпляра класса, есть метод Move, который изменяет позицию, хочу вызвать его с определённой задержкой в цикле
while (car1.currentPosition < screen.width - 10){
div.style.left = car1.currentPosition + 'px';
setInterval(car1.move(), 1000);
}
Car1 тестовый экземпляр, setInterval(car1.move(), 1000) - Данная конструкция не работает, вылетает всё разом без задержки. Вот и вопрос как изменить вызов setIntervalдля того чтобы всё работало
Для этого надо просто создать такую функцию, которая создает задержку...
Пример вот от сюда Источник
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
while (car1.currentPosition < screen.width - 10) {
div.style.left = car1.currentPosition + 'px';
await sleep(2000);
car1.move();
}
while (car1.currentPosition < screen.width - 10){
div.style.left = car1.currentPosition + 'px';
setInterval(function(){car1.move()}, 1000);
}
Вам нужно прочитать про стек трейс и понять как работает javascript внутри движка. Метод while синхронный и будет выполняться пока не завершится в то время как setInterval асинхронный - он упадет в web APIs и будет ждать пока event loop его не вызовет (иными словами пока не пройдет весь стек трейс синхронных функций). Попробуйте использовать самовызывающиеся setTimeout (что-то типа этого):
setTimeout(function timeout() {
if (car1.currentPosition < screen.width - 10) {
div.style.left = car1.currentPosition + 'px';
setTimeout(timeout, 1000);
}
}, 1000)
Необходимо убрать скобки. Вот так:
while (car1.currentPosition < screen.width - 10){
div.style.left = car1.currentPosition + 'px';
setInterval(car1.move, 1000);
}
UPDATE:
Тогда в вышем случае лучше так:
while (car1.currentPosition < screen.width - 10){
div.style.left = car1.currentPosition + 'px';
setTimeout(function call() {
car1.move();
setTimeout(call, 1000);
}, 1000);
}
Данный код ждет, пока выполнется перемещение элемента.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости