queue: function( elem, type, data ) { var queue; if ( elem ) { //先获取相应类型的队列 type = ( type || "fx" ) + "queue"; queue = jQuery._data( elem, type ); //在队列末尾添加函数 if ( data ) { if ( !queue || jQuery.isArray(data) ) { queue = jQuery._data( elem, type, jQuery.makeArray(data) ); } else { queue.push( data ); } } return queue || []; } }
c.jQuery.fn.dequeue
移除每个匹配元素的指定队列中的第一个函数,并执行被移除的函数。内部调用jQuery.dequeue来实现。jQuery.dequeue的源码如下
jQuery.dequeue中需要特别注意的是对FX动画队列的处理
dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(),//取出队列中第一个函数 hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; //如果FX队列中出列,总是取出进度点 if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } hooks.cur = fn; if ( fn ) { // 添加进度定点,以防止FX队列自动dequeue if ( type === "fx" ) { queue.unshift( "inprogress" ); } // 清理最后一个队列停止函数 delete hooks.stop; //next和hooks会传递给回调 fn.call( elem, next, hooks ); } //队列长度为0且hooks存在,则删除队列 if ( !startLength && hooks ) { hooks.empty.fire(); } }
注意执行队列中函数传递的参数( elem, next, hooks )。
以上所述就是小编给大家分享的jQuery 1.9.1源码分析系列(十四)之常用jQuery工具,希望大家喜欢。
您可能感兴趣的文章: