2010-05-21 3 views
1

У меня возникли проблемы с использованием нескольких очередей в jQuery. Рассмотрим следующий пример:Несколько очередей в jQuery

$('#example').click(function() { 
    $(this).delay(1000, 'fx2').queue('fx2', function() { 
    alert('here'); 
    }); 
}); 

Предупреждение никогда не срабатывает. Зачем?

+0

выполнить ли 'click' обработчик на всех? – SLaks

ответ

7

Кажется, при вызове delay (или любых других анимации для этого вещества) на настраиваемую очереди вам необходимо также установить, что очередь в движении первой помощи .dequeue()

Когда .dequeue() называется, следующая функция на очередь удаляется из очереди, а затем выполняется. Эта функция должна по очереди (прямо или косвенно) вызывать .dequeue(), чтобы последовательность могла продолжаться.

$('#example').click(function() { 
    $(this).delay(1000, 'fx2').queue('fx2', function(next) { 
    alert('here'); 
    // start the next anim in the queue... 
    next(); 
    }).dequeue('fx2'); 
}); 

jsbin preview

Обратите внимание, что обратный вызов на queue принимает функцию в качестве первого аргумента. Это функция, которую вы хотите вызвать, когда ваша анимация завершена, чтобы следующий элемент в очереди мог выполняться.

код JQuery ручки 'автоматического запуска' в fx очереди в $.fn.queue() function:

if (type === "fx" && queue[0] !== "inprogress") { 
    jQuery.dequeue(this, type); 
} 
+2

Более простой способ сделать это: function (n) {alert ('here'); п(); } ':) –

+1

+1 - Несмотря на то, что код работает нормально, без' $ (this) .dequeue ('fx2'); 'в обратном вызове. Это необходимо? Похоже, что цепочка 'dequeue()' должна быть вызвана? – user113716

+0

+1 Для заметки автозапуска, но я все равно буду использовать следующую функцию, предоставленную в качестве аргумента для обратного вызова, который вы ставите в очередь, намного чище :) –

-1

Пробуйте следующее: jsFiddle пример. Кажется, он работает и делает то, что вы хотите.

+1

За исключением того, что используется очередь 'fx', а не очередь' fx2', как хочет OP. - И все равно стоит включить фактический код в ссылку SO, а не направить фактический ответ на jsFiddle/jsbin – gnarf

+0

Алекс, вы полностью упустили мой вопрос. Я не хочу использовать стандартную очередь fx (как показывает ваш рабочий пример). – kingjeffrey

Смежные вопросы