jQuery анимирован на нескольких элементах, что лучше?

#jquery #animation #elements #animated

#jquery #Анимация #элемент #анимированный

Вопрос:

Я использую функцию jQuery animate в плагине одновременно для многих элементов с разной длительностью для каждого элемента. Я хочу знать, запущена ли какая-либо анимация или анимации вообще нет. Итак, я придумал это:

 if( $div1.is(':animated') || $div2.is(':animated') || $div3.is(':animated') ) return true;
else return false;
  

или это:

 if( $div1.add($div2).add($div3).is(':animated') ) return true;
else return false;
  

Что лучше???

Знаете ли вы какой-либо другой метод???

Мне не нужен этот код $("*").is(':animated'); , потому что он будет проверять все анимации и анимации из других плагинов.

Имейте в виду, что у меня много элементов, а не только 3.

Спасибо за чтение…

Ответ №1:

Я бы выбрал второе, поскольку это требует меньше кода для чтения и обдумывания.

Как правило, DRY лучше.

Вы также могли бы провести рефакторинг этого…

 return $div1.add($div2).add($div3).is(':animated');
  

Ответ №2:

Возможно, вы могли бы поместить класс в divs, которые вы хотели бы проверить на анимацию?

 if ($(".myclass").is(":animated")) return true;
  

Комментарии:

1. кажется, что использование класса происходит быстрее. верните $(«.myclass»).is(«:animated»);

Ответ №3:

Я бы, вероятно, оставил это явным, чтобы сэкономить циклы. Каждый раз, когда вы анимируете, увеличивайте numberOfTotalAnimations . В конце обратного вызова анимации уменьшите его. Это если вам действительно нужна скорость здесь. В остальном, мне нравится предложение класса @Ben’s.

ОБНОВИТЕ примером по запросу:

 var numberOfTotalAnimations = 0;

numberOfTotalAnimations  ;
$('#thing').animate({
    opacity: 0.1
  }, 2000, function() {
    numberOfTotalAnimations--;
  });

if (!numberOfTotalAnimations) {
  console.log("Everything's quiet.");
} else {
  console.log("Something's moving.");
}
  

Это некрасиво, это подвержено ошибкам (в том смысле, что вы можете забыть увеличить или уменьшить счетчик), но это быстро.

Комментарии:

1. Можете ли вы быть более конкретным, приведя пример?

2. Почему бы не переопределить $.fn.animate, чтобы сделать это на 100% автоматически и просто проверить счетчик. СУХОЙ меньший риск.