Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Цикл не работает. (https://javascript.ru/forum/jquery/38288-cikl-ne-rabotaet.html)

Duda.Ml1986@gmail.com 26.05.2013 16:25

Цикл не работает.
 
Есть функция Animate
Её тело:
$(id_for_animate).animate({
   		 marginLeft: left_space
		  }, 200, 'linear', Add(1));

она анимирует один элемент DOMа после вызывает функцию ADD(1) как видно с параметром.

Add() выполняет действия по записи данных о значении свойст некоторых элементах DOMа. Если в конце выполнения функцию поставить вызов Animate() то возникает ошибка.

То есть Animate() -> Add() -> Animate() -> Add() -> Animate() сделать нельзя.

В общем вопрос, как сделать последовательный вызов функций одна за другой без привязки ко времени? Или SetInterval единственный выход?

П.С. Надеюсь я понятно все изложил. Спасибо за любую помощь.

zebra 26.05.2013 16:30

Вопроса не понял, но в коде ошибка. Функция add вызывается сразу. Оберните её
function addCallback() {
   Add(1);
}
$(id_for_animate).animate({
         marginLeft: left_space
          }, 200, 'linear', addCallback);

elnoro 26.05.2013 16:34

Ошибка возникает из-за того, что функции не завершаются и при этом выполняются внутри друг друга, иначе говоря, переполняется стек вызовов.
Проблему можно решить следующим образом: в конце Add вызывайте функцию Animate так:
setTimeout(Animate, 0);

Тогда функция Animate выполнится только после того, как выполнится функция Add.

elnoro 26.05.2013 16:37

zebra,
Я так понял, что функция Add(1) выполняется, если убрать оттуда вызов Animate. Можно предположить, что определение функции Add выглядит так:
function Add(val) {
    return function () {
        /*do something with val*/
       Animate();
    };
}

Duda.Ml1986@gmail.com 26.05.2013 16:51

Дополнение к теме.
 
Спасибо за ответы. Уточню то что нужно:

Нужно что бы по заверщению анимации над обьекто программа провела некоторые действия и после запустила туже анимацию.

Например.

Функция Анимации движет блок, закончила и вызвала функцию Тратата, а по завершению функции Тратата снова вызывалась функция Анимации и так далее.

Функция Тратата срабатывает до завершения функции Анимации. Как решить?

Duda.Ml1986@gmail.com 26.05.2013 16:55

Всем спасибо, читал мимо ушей ))

$(id_for_animate).animate({
   		 marginLeft: left_space
		  }, 200, 'linear', function(){ Play() });



$(id_for_animate).animate({
   		 marginLeft: left_space
		  }, 200, 'linear', Play() );


Это не одно и тоже.
Всем спасибо.


Часовой пояс GMT +3, время: 10:44.