Цикл не работает.
Есть функция Animate
Её тело:
$(id_for_animate).animate({
marginLeft: left_space
}, 200, 'linear', Add(1));
она анимирует один элемент DOMа после вызывает функцию ADD(1) как видно с параметром. Add() выполняет действия по записи данных о значении свойст некоторых элементах DOMа. Если в конце выполнения функцию поставить вызов Animate() то возникает ошибка. То есть Animate() -> Add() -> Animate() -> Add() -> Animate() сделать нельзя. В общем вопрос, как сделать последовательный вызов функций одна за другой без привязки ко времени? Или SetInterval единственный выход? П.С. Надеюсь я понятно все изложил. Спасибо за любую помощь. |
Вопроса не понял, но в коде ошибка. Функция add вызывается сразу. Оберните её
function addCallback() {
Add(1);
}
$(id_for_animate).animate({
marginLeft: left_space
}, 200, 'linear', addCallback);
|
Ошибка возникает из-за того, что функции не завершаются и при этом выполняются внутри друг друга, иначе говоря, переполняется стек вызовов.
Проблему можно решить следующим образом: в конце Add вызывайте функцию Animate так: setTimeout(Animate, 0); Тогда функция Animate выполнится только после того, как выполнится функция Add. |
zebra,
Я так понял, что функция Add(1) выполняется, если убрать оттуда вызов Animate. Можно предположить, что определение функции Add выглядит так:
function Add(val) {
return function () {
/*do something with val*/
Animate();
};
}
|
Дополнение к теме.
Спасибо за ответы. Уточню то что нужно:
Нужно что бы по заверщению анимации над обьекто программа провела некоторые действия и после запустила туже анимацию. Например. Функция Анимации движет блок, закончила и вызвала функцию Тратата, а по завершению функции Тратата снова вызывалась функция Анимации и так далее. Функция Тратата срабатывает до завершения функции Анимации. Как решить? |
Всем спасибо, читал мимо ушей ))
$(id_for_animate).animate({
marginLeft: left_space
}, 200, 'linear', function(){ Play() });
$(id_for_animate).animate({
marginLeft: left_space
}, 200, 'linear', Play() );
Это не одно и тоже. Всем спасибо. |
| Часовой пояс GMT +3, время: 02:15. |