jQuery stop (true, true) для перехода к концу всех анимаций в очереди - PullRequest
10 голосов
/ 17 марта 2012

Я использовал метод jQuery stop(true, true) для очистки запущенных анимаций, поэтому следующая начинается немедленно. Я заметил, что первый параметр, clearQueue, очищает всю очередь анимации, но второй параметр, jumpToEnd, переходит только в конец текущей запущенной анимации, а не тех, которые были удалены из очереди. Есть ли способ очистить его и перейти к концу всех анимаций в очереди?

Вместо этого я обработал несколько вызовов stop(false, true), но это будет обрабатывать, например, только 3 анимации в очереди.

$(this)
  .stop(false, true)
  .stop(false, true)
  .stop(false, true)
  .addClass('hover', 200);

Edit:

Я закончил тем, что добавил свой собственный метод, stopAll, согласно ответу Атес Горал:

$.fn.extend({ stopAll: function () {
    while (this.queue().length > 0)
      this.stop(false, true);
    return this;
  } });
$(this).stopAll().addClass('hover', 200);

Я надеюсь, что кто-то еще найдет это полезным.

Ответы [ 4 ]

6 голосов
/ 17 марта 2012

Цепочка, кратная stop(false, true), имеет смысл.Вместо жесткого кодирования фиксированного количества связанных вызовов вы можете проверить длину очереди:

while ($(this).queue().length) {
    $(this).stop(false, true);
}

Демо: http://jsfiddle.net/AB33X/

4 голосов
/ 04 февраля 2014

jQuery 1.9 представил метод .finish () , который достигает именно этого.

0 голосов
/ 19 марта 2015

Проверка наличия класса (устанавливается при наведении и удаляется при обратном вызове mouseOut animate) перед началом новой анимацииКогда новая анимация запускается, удалите очередь.

$("div").hover(function(){
    if (!$(this).hasClass('animated')) {
        $(this).dequeue().stop().animate({ width: "200px" });
    }
}, function() {
    $(this).addClass('animated').animate({ width: "100px" }, "normal", "linear", function() {
        $(this).removeClass('animated').dequeue();
    });
});
0 голосов
/ 26 ноября 2014

Я также замечаю из документации метода .finish () в jQuery 1.9, что

Animations may be stopped globally by setting the property $.fx.off 
to true. When this is done, all animation methods will immediately 
set elements to their final state when called, rather than displaying an effect.

Существует также хорошая демонстрация различных методов на .finish () * 1005.* страница документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...