如果我这样做有什么区别吗:
$queue.queue(function(next){
//...
next();
}).queue(function(next){
//...
next();
});
对比
$queue.queue(function(){
//...
$(this).dequeue();
}).queue(function(){
//...
$(this).dequeue();
});
他们做同样的事情吗?
有什么区别,我应该使用哪个?
这很奇怪,因为 jQuery 文档并没有真正提到 .next()
,他们总是说使用 .dequeue()
但在我的工作场所人们使用 .next()
函数,所以这让我很困惑。
据我所知,没有区别。我不确定为什么一个比另一个更可取,或者为什么它们都被提及,因为这让我感到困惑。
查看http://code.jquery.com/jquery-1.9.1.js我们看到:
1915 next = function() {
jQuery.dequeue( elem, type );
};
...在 jQuery.dequeue
中方法。稍后(在第 1936 行)将其称为 fn.call(elem, next, hooks)
。 .你看next
是 queue
中的第一个参数回调,和fn
是queue
那时。
展望 future ,我们看到
1983 dequeue: function( type ) {
return this.each(function() {
jQuery.dequeue( this, type );
});
},
这是在 jQuery.fn
上定义的, 所以这就是 $(this).dequeue
调用的函数.然而,这做的是完全一样的事情。唯一的区别是出队的元素。在 fn.dequeue
它遍历集合,但这只是 $(this)
的一个元素.
如果我们回头看,我们会看到什么elem
虽然是:
1908 dequeue: function( elem, type ) {
...嘿,等一下...这是this
(当从 $(this).dequeue
调用时)!因此你可以看到他们做的是完全一样的事情。 $("some other collection").dequeue
不过,工作方式会有所不同。
调用 next()
为您节省额外的 .each
打电话,所以我想那会更快。
顺便说一下,你不必调用它 next
在回调中,因为您可以将参数重命名为您想要的任何名称。
编辑:根据我与杰出同事@FabrícioMatté 的小型讨论,next()
之间实际上可能存在功能差异。和 $(this).dequeue()
,特别是在不使用标准时 fx
队列。当 next
函数被创建,它被设置为调用$.dequeue
使用从 queue
获取的类型已经,但是 $.fn.dequeue
将类型作为参数。这可能是坚持使用 next()
的更多动力,尽管我实际上从未见过有人使用标准效果队列以外的任何东西。