2010-05-21 71 views
1

我在jQuery中使用多个队列时遇到问题。考虑以下示例:jQuery中的多个队列

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

警报从不会触发。为什么?

+0

是否'click'处理程序中执行呢? – SLaks 2010-05-21 20:42:54

回答

7

似乎在第一次使用.dequeue()

.dequeue()被调用时,在接下来的功能,您还需要设置在运动中该队列自定义队列调用时delay(或任何其他动画为此事)队列从队列中移除,然后执行。该函数应该依次(直接或间接)导致.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'); N(); }':) – 2010-05-21 21:05:10

+1

+1 - 尽管代码似乎在回调中没有'$(this).dequeue('fx2');'也能正常工作。有必要吗?似乎链接的'dequeue()'必须被调用? – user113716 2010-05-21 21:05:15

+0

+1对于自动启动笔记,但我仍然使用提供的下一个函数作为您正在排队的回调的参数,非常干净:) – 2010-05-21 21:09:04

-1

请尝试以下jsFiddle示例。它似乎工作,并做你想做的。

+1

除了使用'fx'队列而不是'fx2'队列作为OP想要的。 - 还是值得在SO链接中包含实际的代码,而不是将实际的答案推给jsFiddle/jsbin – gnarf 2010-05-21 20:57:29

+0

亚历克斯,你完全错过了我的问题。我不想使用标准的FX队列(就像你的工作例子那样)。 – kingjeffrey 2010-05-21 21:43:52