jQuery анимирован на нескольких элементах, что лучше? - PullRequest
4 голосов
/ 23 мая 2011

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

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.

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

Ответы [ 3 ]

7 голосов
/ 23 мая 2011

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

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

Вы также можете сделать рефакторинг этого ...

return $div1.add($div2).add($div3).is(':animated');
4 голосов
/ 23 мая 2011

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

if ($(".myclass").is(":animated")) return true;
1 голос
/ 23 мая 2011

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

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

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.");
}

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

...