Запустить событие после завершения всех анимаций из текущей функции

Я пытался заставить функцию срабатывать только после того, как все элементы .animate() функции были завершены, включая задержку и ослабление.

Я пробовал несколько разных методов без удачи, есть идеи?

  $("#inner_work").on("mouseenter", ".activeBox", function(){
        var thisBox = $(this).attr('id');
        $("#inner_work [class^='workBox_']").each(function(){
            if($(this).attr('id') != thisBox){
                $(this).stop().delay(randomEasing(200,800)).animate({
                    opacity:0
                }, randomEasing(200,700));
            } else {
                $(this).stop().animate({
                    opacity:1
                }, 'fast');
            }
        }); 
  });

Как вызвать событие ПОСЛЕ того, как анимация завершена?

randomEasing только эта функция, чтобы сделать ее в случайном порядке

function randomEasing(from,to)
{
    return Math.floor(Math.random()*(to-from+1)+from);
}

1 ответ

Решение

Вы можете использовать отложенные объекты и запросить .promise() зарегистрировать обратный вызов, который будет вызываться только после завершения всех анимаций для каждого элемента в коллекции:

$("#inner_work [class^='workBox_']").promise().done(function() { 
     ...
});

Это может быть связано с вашим существующим кодом:

$("#inner_work [class^='workBox_']").each(function() {
    // your existing animation code
}).promise().done(function() {
    ...
});
Другие вопросы по тегам