Пользовательская очередь jQuery - PullRequest
3 голосов
/ 20 ноября 2010

То, что я пытаюсь сделать, это разделять анимации, чтобы я мог убивать определенные, не затрагивая важные.Я пытаюсь добавить анимации mouseenter / mouseleave в очередь, чтобы убить их при запуске другой анимации.Приведенный ниже код ничего не делает для остановки анимации в очереди.Он ведет себя как по умолчанию, где анимация будет накапливаться в очереди и проигрываться.Что дает?

$('.item').mouseenter(function(){
    $(this).clearQueue("test");
    $(this).queue("test",function(next){        
        $(this).animate({
            height: '250px'
        },500);
    });
    $(this).dequeue("test");
}).mouseleave(function(){
    $(this).clearQueue("test");
    $(this).queue("test",function(next){        
        $(this).animate({
            height: '140px'
        }, 250);
    });
    $(this).dequeue("test");
})

1 Ответ

1 голос
/ 20 ноября 2010

Это потому, что функции, которые вы выполняете в очереди "test", завершены немедленно , в результате вы мгновенно добавляете вещи в fx (по умолчаниюанимация), ваша "test" очередь остается пустой все время.

В ней есть только элемент перед вызовом .dequeue() ... тогда очередь fx имеетновая запись, эта очередь продолжает строиться и эта очередь, которую вы никогда не очищаете.Это выглядит так:

  • $(this).clearQueue("test"); - эта очередь уже пуста
  • $(this).queue("test", ...); - добавить элемент в очередь test
  • $(this).animate({... });- поставить анимацию в очередь в fx очередь
  • $(this).dequeue("test"); - запустить очередь test, которая сразу же очищается, поскольку .animate() возвращается мгновенно.
...