var box = $('.box');
function fn(next) { //$.dequeue(box, 'max');
console.log("C")
console.log(next)
next();
}
function fn1(next) {
console.log("B")
next();
}
function fn2() {
console.log("A")
}
//入列
$.queue(box, 'max', [fn, fn1, fn2]);
$.dequeue(box, 'max');
queue: function(elem, type, data) {
var queue;
if (elem) {
//maxqueue fxqueue
type = (type || "fx") + "queue";
queue = data_priv.get(elem, type); //queue获取缓存;
//cache.maxqueue === undefinded
if (data) {//有data就进行添加,没data,就直接返回;
if (!queue || jQuery.isArray(data)) {//data是数组,或者queue不存在
//data 批量的操作callback
queue = data_priv.access(elem, type, jQuery.makeArray(data));//data存在,返回data数组;
} else {
queue.push(data);
}
}
return queue || [];//data存不存在返回的都是queue
}
},
//出列
dequeue: function(elem, type) {
type = type || "fx";
//数据对象 maxqueue 分层的数据 [fn,fn1,fn2]
var queue = jQuery.queue(elem, type);
// console.log(queue)
var startLength = queue.length,
fn = queue.shift(), //fn 第一个元素删除,并返回第一个元素;
next = function() { //jQuery.dequeue()
jQuery.dequeue(elem, type);
};
fn.call(elem, next);//传入next;
}
代码没有贴全,我觉得这个最有趣的是next(),可以执行队列中的下一个函数,像vue中的路由都用到这一个思想;