Как вернуться из функции, если несколько анимаций завершены

0

Я использую функцию, для которой будут анимированы некоторые вещи, например:

function doMyStuff(){
 $('#test1').animate({...}, {queue:false});
 $('#test2').animate({...}, {queue:false});
 return true;
}
// this should only go on if doMyStuff() is complete
doMyStuff();
alert("We can go on, doMyStuff() is finished");

Я только хочу продолжить, если эта функция закончена с его анимацией. Как я могу это сделать? В настоящее время он не ждет окончания анимации.

Теги:
function
animation

1 ответ

4

Используйте обещания:

function doMyStuff(){
   return $.when(
     $('#test1').animate({...}, {queue:false}).promise(),
     $('#test2').animate({...}, {queue:false}).promise()
   );
}

doMyStuff().then(function() {
    alert("We can go on, doMyStuff() is finished");
});

Весь код, который вы хотите выполнить после завершения анимации, должен быть вызван из обратного вызова, который передается. .then.

Из документации .promise (акцент мой):

Метод .promise() возвращает динамически сгенерированное Promise, которое разрешается после того, как все действия определенного типа, привязанные к коллекции, в очереди или нет, закончились.

По умолчанию тип "fx", что означает, что возвращаемое Promise разрешается, когда все анимации выбранных элементов завершены.

$.when просто создает новое обещание, которое разрешается, когда все обещания, переданные ему, разрешаются.

  • 0
    Теперь мне интересно, почему эта работа без использования .promise() ??? Я имею в виду: return $.when( $('#test1').animate({...}, {queue:false}), $('#test2').animate({...}, {queue:false}) );
  • 0
    AFAIK, $.when .promise() вызывает .promise() если в качестве аргумента передается объект jQuery. Но мне нравится быть явным :)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню