jQuery 源码分析笔记(7) Queue

 更新时间:2011年06月19日 23:57:13   作者:  
queue是用来维护函数队列的。比较常用的是queue(queueName, callback);其中queueName缺省是fn,即标准函数队列。
每个Element可以拥有多个队列,但是基本上都只使用到一个,即默认的fn队列。队列允许一系列函数被异步地调用而不会阻塞程序。例如:$("#foo").slideUp().fadeIn();其实这个就是我们大家常用的链式调用,实际上这是一个Queue。所以队列和Deferred地位类似,是一个内部使用的基础设施。当slideUp运行时,fadeIn被放到fx队列中,当slideUp完成后,从队列中被取出运行。queue函数允许直接操作这个链式调用的行为。同时,queue可以指定队列名称获得其他能力,而不局限于fx队列。
复制代码 代码如下:

// 一般用法:
$("#foo").slideUp(function() {
alert("Animation complete.");
});
// 相当于:
$("#foo").slideUp(); // 不提供回调,只是触发事件
$("#foo").queue(function() { // 把回调函数加入
alert("Animation complete.");
$(this).dequeue(); // 必须从队列中取出,那么队列中的下一个函数就有机会被调用
});

queue内部使用data或者JavaScript数组API来保存数据。其中操作数组的push和shift天生就是一组队列API。而data可以用来保存任意数据。
复制代码 代码如下:

queue: function(elem, type, data) {
if(elem) {
// 默认是fn
type = (type || "fx") + "queue";
// data内部API:data(element, key, value, pvt);
// 这里不传入data,是为了效率的考虑。如果没传入data,则只是get队列,那么就不需要以下的判断了
var q = jQuery.data(elem, type, undefined, true);
if(data) {
if(!q || jQuery.isArray(data)) {
q = jQuery.data(elem, type, jQuery.makeArray(data), true);
} else {
q.push(data); // 压入
}
}
return q || [];
}
}
dequeue: function(elem, type) { type = type || "fx"; // 得到这个队列 var queue = jQuery.queue(elem, type), // 出列一个元素 fn = queue.shift(), defer;
// "inprogress"岗哨
if(fn === "inprogress") {
fn = queue.shift();
}
if(fn) {
// 加一个岗哨,防止自动出列
if(type === "fx") {
queue.unshift("inprogress");
}
// 执行
fn.call(elem, function() {
jQuery.dequeue(elem, type);
});
}
if(!queue.length) {
jQuery.removeData(elem, type + "queue", true);
handleQueueMarkDefer(elem, type, "queue");
}
}

相关文章

  • jQuery实现的登录浮动框效果代码

    jQuery实现的登录浮动框效果代码

    这篇文章主要介绍了jQuery实现的登录浮动框效果代码,点击登陆链接可弹出悬浮登录框,涉及jQuery中show与hide方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 使用jQuery仿苹果官网焦点图特效

    使用jQuery仿苹果官网焦点图特效

    这篇文章主要介绍了使用jQuery仿苹果官网焦点图特效,非常的炫酷,需要的朋友可以参考下
    2014-12-12
  • jQuery - css() 方法示例详解

    jQuery - css() 方法示例详解

    css()方法设置或返回被选元素的一个或多个样式属性,下面有几个不错的示例,大家可以感受下
    2014-01-01
  • jQuery zTree如何改变指定节点文本样式

    jQuery zTree如何改变指定节点文本样式

    这篇文章主要介绍了jQuery zTree如何改变指定节点文本样式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • JQuery解析XML数据的几个简单实例

    JQuery解析XML数据的几个简单实例

    下面小编就为大家带来一篇JQuery解析XML数据的几个简单实例。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 基于jQuery倒计时插件实现团购秒杀效果

    基于jQuery倒计时插件实现团购秒杀效果

    倒计时在WEB上应用非常广泛,如考试系统倒计时,团购网站中的优惠活动倒计时等等。今天,我们来使用jQuery倒计时超级实现团购秒杀效果,感兴趣的朋友一起学习吧
    2016-05-05
  • juqery 学习之三 选择器 层级 基本

    juqery 学习之三 选择器 层级 基本

    juqery 学习之三 选择器 层级 基本,学习jquery的朋友可以参考下。
    2010-11-11
  • 检测jQuery.js是否已加载的判断代码

    检测jQuery.js是否已加载的判断代码

    测类、方法、变量或属性是否已存在,这是Javascript编程基础知识。在这里我们就是要检测jQuery()或$()函数是否存在
    2011-05-05
  • jQuery中attr()方法用法实例

    jQuery中attr()方法用法实例

    这篇文章主要介绍了jQuery中attr()方法用法,实例分析了attr()方法的功能、定义及设置或返回匹配元素属性值的使用技巧,需要的朋友可以参考下
    2015-01-01
  • jquery分割字符串的方法

    jquery分割字符串的方法

    这篇文章主要介绍了jquery分割字符串的方法,涉及jQuery中使用split方法进行字符串分割的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论