Я использую функцию, для которой будут анимированы некоторые вещи, например:
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 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
просто создает новое обещание, которое разрешается, когда все обещания, переданные ему, разрешаются.
.promise()
??? Я имею в виду:return $.when( $('#test1').animate({...}, {queue:false}), $('#test2').animate({...}, {queue:false}) );
$.when
.promise()
вызывает.promise()
если в качестве аргумента передается объект jQuery. Но мне нравится быть явным :)