Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.05.2013, 16:25
Аватар для Duda.Ml1986@gmail.com
Профессор
Отправить личное сообщение для Duda.Ml1986@gmail.com Посмотреть профиль Найти все сообщения от Duda.Ml1986@gmail.com
 
Регистрация: 01.09.2011
Сообщений: 263

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

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

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

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

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

П.С. Надеюсь я понятно все изложил. Спасибо за любую помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 26.05.2013, 16:30
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Вопроса не понял, но в коде ошибка. Функция add вызывается сразу. Оберните её
function addCallback() {
   Add(1);
}
$(id_for_animate).animate({
         marginLeft: left_space
          }, 200, 'linear', addCallback);
Ответить с цитированием
  #3 (permalink)  
Старый 26.05.2013, 16:34
Аспирант
Отправить личное сообщение для elnoro Посмотреть профиль Найти все сообщения от elnoro
 
Регистрация: 23.06.2011
Сообщений: 39

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

Тогда функция Animate выполнится только после того, как выполнится функция Add.
Ответить с цитированием
  #4 (permalink)  
Старый 26.05.2013, 16:37
Аспирант
Отправить личное сообщение для elnoro Посмотреть профиль Найти все сообщения от elnoro
 
Регистрация: 23.06.2011
Сообщений: 39

zebra,
Я так понял, что функция Add(1) выполняется, если убрать оттуда вызов Animate. Можно предположить, что определение функции Add выглядит так:
function Add(val) {
    return function () {
        /*do something with val*/
       Animate();
    };
}
Ответить с цитированием
  #5 (permalink)  
Старый 26.05.2013, 16:51
Аватар для Duda.Ml1986@gmail.com
Профессор
Отправить личное сообщение для Duda.Ml1986@gmail.com Посмотреть профиль Найти все сообщения от Duda.Ml1986@gmail.com
 
Регистрация: 01.09.2011
Сообщений: 263

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

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

Например.

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

Функция Тратата срабатывает до завершения функции Анимации. Как решить?
Ответить с цитированием
  #6 (permalink)  
Старый 26.05.2013, 16:55
Аватар для Duda.Ml1986@gmail.com
Профессор
Отправить личное сообщение для Duda.Ml1986@gmail.com Посмотреть профиль Найти все сообщения от Duda.Ml1986@gmail.com
 
Регистрация: 01.09.2011
Сообщений: 263

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

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



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


Это не одно и тоже.
Всем спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
Не работает цикл for lyoka14 Общие вопросы Javascript 2 26.03.2012 08:47
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41
ajax запросы, работает на одних компах и не работает на других vtornik23 AJAX и COMET 2 22.03.2010 18:22
Safari + ajax некорректно работает, а в других работает demi AJAX и COMET 35 15.07.2009 14:11