jQuery 源码分析笔记(7)
[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)相关推荐
- jQuery 源码分析笔记(3)
###Deferred机制 从1.5版本开始,jQuery加入了Deferred功能,让事件处理队列更加的完善.并用 这个机制重写了Ajax模块.虽然还没轮到Ajax,但是接下来的事件处理函数中牵扯到 ...
- jQuery源码分析笔记-构造jQuery对象(三)
jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,jQuery对象由构造函数jQuery()创建,$()则是jQuery()的缩写. 调用构造函数jQue ...
- jQuery源码分析-each函数
本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...
- jQuery源码分析系列
声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...
- SharpDevelop源码分析笔记(一)
SharpDevelop自动命令启动UI部分(看SharpDevelop源码分析笔记随想) 参见:Fbt2008的大作 SharpDevelop源码分析笔记(一) 源文档 <http://ww ...
- [转] jQuery源码分析-如何做jQuery源码分析
jQuery源码分析系列(持续更新) jQuery的源码有些晦涩难懂,本文分享一些我看源码的方法,每一个模块我基本按照这样的顺序去学习. 当我读到难度的书或者源码时,会和<如何阅读一本书> ...
- [转]jQuery源码分析系列
文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...
- Clamav杀毒软件源码分析笔记 六
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Clam ...
- Retrofit源码分析笔记(一)
如遇图片无法加载请点击此链接 我们先从最简单的Retrofit使用方法看 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7bbuois-1665971394319)( ...
最新文章
- 常考数据结构与算法:二叉树的最大深度
- dalvik 与art 区别
- 0428 团队项目2.0
- 这是我在网上安的第一个窝!
- docker安装mysql8,Docker安装Mysql8.0,并配置忽略大小写
- antd 表单域验证规则 - 只能输入数字字符,去除前导0
- bat执行exe程序_dos命令start教程,并行运行exe程序或者启动bat批处理cmd脚本
- angular 点菜_Vue2与Angular5实现无人点餐、无人收银系统项目实战视频教程【组合套餐】(大地)...
- C语言编译器字母怎么输入,c语言编译器怎么使用,c语言编译器下载使用教程
- 安卓吃鸡玩家专属:教你电脑玩刺激战场匹配手机最简单的方式
- 基于cnn的人脸识别_人脸识别技术全面总结:从传统方法到深度学习
- OSChina 周四乱弹 —— 用户体验不好就是要出人命的
- 共享系统APP开发:带你体验真实的共享生活
- web.xml学习随笔
- 小米平板3最简单刷成开发版获得ROOT权限的步骤
- OPN/SPN/PLMN的区别
- 精妙绝伦的CSS——CSS效果例子
- 电脑风扇控制软件-全网最全教程+下载链接
- 你真的了解Java系统启动流程吗?java基础教程完整版
- 开放式激光振镜+运动控制器(二):振镜填充