-1

Здравствуйте, вопрос у меня такой, ну изменять позицию экземпляра класса, есть метод Move, который изменяет позицию, хочу вызвать его с определённой задержкой в цикле

while (car1.currentPosition < screen.width - 10){
 div.style.left = car1.currentPosition + 'px';
 setInterval(car1.move(), 1000);
}

Car1 тестовый экземпляр, setInterval(car1.move(), 1000) - Данная конструкция не работает, вылетает всё разом без задержки. Вот и вопрос как изменить вызов setIntervalдля того чтобы всё работало

Kirill
  • 75

4 Answers4

1

Проблему решила данная конструкция

function initialization(vechicle) {

setInterval(function () {
    vechicle.move();
    div.style.left = vechicle.currentPosition + 'px';
    if (vechicle.currentPosition === screen.width - 100) {
        vechicle.setCurrentPosition(0);
        div.style.left = '0px';
        count++;
    }
}, 5);
Kirill
  • 75
-1
while (car1.currentPosition < screen.width - 10){
 div.style.left = car1.currentPosition + 'px';
 setInterval(function(){car1.move()}, 1000);
}
L11VADIS
  • 608
  • пожалуйста, постарайтесь оставлять чуть более развёрнутые ответы. дополнить ответ можно, нажав [edit] – aleksandr barakin Dec 04 '17 at 00:16
-1

Вам нужно прочитать про стек трейс и понять как работает 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)
-2

Необходимо убрать скобки. Вот так:

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);
}

Данный код ждет, пока выполнется перемещение элемента.