При анимации, как огонь обратный вызов только, когда все элементы сделаны?

При анимации в jQuery, что такое лучшая практика для увольнения обратного вызова только, когда ВСЕ элементы сделаны, анимировав а не для каждого элемента?

Например:

$('.someElements').fadeOut('fast', function() {
  // dont do this until ALL elements are done fading
}
6
задан Maria Söderberg 24 May 2010 в 13:22
поделиться

2 ответа

Это может быть фрагмент, который стоит попробовать:

var numberOfElements = $('.someElements').length;

$('.someElements').fadeOut(fast, function() {
  if( numberOfElements-- > 0 ) return;
  alert('call the Fireman!'); 
});

Предупреждение Это просто заполнитель для конечного обратного вызова, который вам нужно запустить.

РЕДАКТИРОВАТЬ (другой способ):

Вы также можете захватить все элементы, кроме последнего .

$('.someElements').not(.someElements:last).fadeOut();

, а затем добавить fadeOut с обратным вызовом только для It

$('.someElements:last').fadeOut(fast, function (){ 
   // do something, it's the end of the world
};
4
ответ дан 17 December 2019 в 02:24
поделиться

Это большой вопрос, согласно документации jQuery:

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

Чтобы обойти это ограничение, можно:

  • Перечислить все элементы, соответствующие .someElements, и настроить отдельный обратный вызов для каждого из них.
  • Иметь переменную count, которая отслеживает количество всех обратных вызовов.
  • В своем обратном вызове уменьшайте count, пока она не достигнет 0.

Когда счетчик достигнет 0, все обратные вызовы завершатся, и вам будет гарантировано, что все элементы закончили анимацию. Отсюда вы можете включить в обратный вызов специальный код, который будет делать все, что вам нужно...

2
ответ дан 17 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: