###Queue

[queue](http://api.jquery.com/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) {// 默认是fntype = (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");}
}

转载于:https://www.cnblogs.com/fjzhou/archive/2011/06/18/jquery-source-7.html

jQuery 源码分析笔记(7)相关推荐

  1. jQuery 源码分析笔记(3)

    ###Deferred机制 从1.5版本开始,jQuery加入了Deferred功能,让事件处理队列更加的完善.并用 这个机制重写了Ajax模块.虽然还没轮到Ajax,但是接下来的事件处理函数中牵扯到 ...

  2. jQuery源码分析笔记-构造jQuery对象(三)

    jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,jQuery对象由构造函数jQuery()创建,$()则是jQuery()的缩写. 调用构造函数jQue ...

  3. jQuery源码分析-each函数

    本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...

  4. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

  5. SharpDevelop源码分析笔记(一)

    SharpDevelop自动命令启动UI部分(看SharpDevelop源码分析笔记随想) 参见:Fbt2008的大作  SharpDevelop源码分析笔记(一) 源文档 <http://ww ...

  6. [转] jQuery源码分析-如何做jQuery源码分析

    jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...

  7. [转]jQuery源码分析系列

    文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...

  8. Clamav杀毒软件源码分析笔记 六

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Clam ...

  9. Retrofit源码分析笔记(一)

    如遇图片无法加载请点击此链接 我们先从最简单的Retrofit使用方法看 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7bbuois-1665971394319)( ...

最新文章

  1. 常考数据结构与算法:二叉树的最大深度
  2. dalvik 与art 区别
  3. 0428 团队项目2.0
  4. 这是我在网上安的第一个窝!
  5. docker安装mysql8,Docker安装Mysql8.0,并配置忽略大小写
  6. antd 表单域验证规则 - 只能输入数字字符,去除前导0
  7. bat执行exe程序_dos命令start教程,并行运行exe程序或者启动bat批处理cmd脚本
  8. angular 点菜_Vue2与Angular5实现无人点餐、无人收银系统项目实战视频教程【组合套餐】(大地)...
  9. C语言编译器字母怎么输入,c语言编译器怎么使用,c语言编译器下载使用教程
  10. 安卓吃鸡玩家专属:教你电脑玩刺激战场匹配手机最简单的方式
  11. 基于cnn的人脸识别_人脸识别技术全面总结:从传统方法到深度学习
  12. OSChina 周四乱弹 —— 用户体验不好就是要出人命的
  13. 共享系统APP开发:带你体验真实的共享生活
  14. web.xml学习随笔
  15. 小米平板3最简单刷成开发版获得ROOT权限的步骤
  16. OPN/SPN/PLMN的区别
  17. 精妙绝伦的CSS——CSS效果例子
  18. 电脑风扇控制软件-全网最全教程+下载链接
  19. 你真的了解Java系统启动流程吗?java基础教程完整版
  20. 开放式激光振镜+运动控制器(二):振镜填充

热门文章

  1. 【翻译】BCH难度调整算法-ASERT DAA(aserti3-2d)——2020.11.15激活
  2. GIT+ Coding使用方法
  3. linux 内核 网络设备接口数据结构
  4. win7 ipv6的默认网关怎么填
  5. 简单快递查询接口API/插件开发使用
  6. 北语19春计算机应用基础,北语19春《计算机应用基础》练习
  7. 基于SSM的学生宿舍设备报修系统的设计与实现+论文六稿+安装视频+包远程安装
  8. Calendar介绍
  9. (猴子选王)约瑟夫环方法4种方法之一——循环链表法
  10. PIL 一秒切九图 朋友圈发图神器