jQuery. живые цепочки, обратные вызовы и .stop (true, true) - PullRequest
0 голосов
/ 22 апреля 2010

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

Анимация запускается хешем при изменении адреса (# page1, # page2 и т. Д.) - поэтому, когда пользователь быстро меняет состояние истории, если в данный момент выполняется анимация, его нужно остановить, чтобы не стоять в очереди Проблема в том, что, если я добавлю .stop (true, true), он будет отображаться только для перехода к концу текущей запущенной анимации - и выполняет только свой обратный вызов, если он есть. Мне нужно, чтобы он перешел к концу всех цепочек анимации и запустил все обратные вызовы (ну, на самом деле, только последний).

Возможно ли это как-нибудь? Огромное спасибо.

1 Ответ

1 голос
/ 22 апреля 2010

Ответ очень прост. Спасибо JacobM за вдохновение.

(function($){
    $.fn.extend({
        hardStop: function(){
            return this.each(function(){
                var e = $(this);
                while (e.queue().length){
                    e.stop(false, true);
                }
            });
        }
    });
})(jQuery);

$("#element").hardStop();

Позднее редактирование: я заметил, что в сложных цепочках анимации необходимо убедиться, что выполнение обратного вызова не добавляет больше функций в очередь fx уже «очищенного» элемента (учитывая, что в оригинальный селектор):

(function($){
    $.fn.extend({
        hardStop: function(){
            var stopped = false
            while (!stopped) {
                this.each(function(){
                    var e = $(this);
                    while (e.queue().length){
                        e.stop(false, true);
                    }
                });
                stopped = true;
                this.each(function(){
                    var e = $(this);
                    if (e.queue().length){
                        stopped = false;
                    }
                });
            }
        }
    });
})(jQuery);

У меня такое чувство, что это решение можно упростить ...

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