jQuery队列(二)
继续阅读队列提供的方法。
jQuery.extend({
queue: function( elem, type, data ) {}, // 将data按照某种类型存储到elem对应的队列中,并等待执行。同时返回目前队列中的所有数据
dequeue: function( elem, type ) { // 出列操作,如果想要执行队列中的所有方法,则有多少个方法就需要执行多少次dequeue方法
// 如果指定类型就按照指定类型查找,否则默认是“fx”
type = type || "fx";
// 拿出队列中的所有数据
var queue = jQuery.queue( elem, type ),
startLength = queue.length,
// 取出队列(数组)中的第一个值(先进先出),(第一个数据是上一次执行dequeue时添加到队列中的“inprogress”占位符?)
fn = queue.shift(),
// ??
hooks = jQuery._queueHooks( elem, type ),
// 取出队列中的下一个
next = function() {
jQuery.dequeue( elem, type );
};
// 当进行出栈操作时,总是删除名为“inprogress”的数据,并继续取下一条。
if ( fn === "inprogress" ) {
fn = queue.shift();
startLength--;
}
if ( fn ) {
// 添加占位符,阻止自动出栈(注释中是这么写的,不明白为什么会自动执行出栈操作)
if ( type === "fx" ) {
queue.unshift( "inprogress" );
}
// ?
delete hooks.stop;
// 执行方法
fn.call( elem, next, hooks );
}
if ( !startLength && hooks ) {
hooks.empty.fire();
}
}, // 从elem相应类型对应的队列中下一条数据并执行这条数据
_queueHooks: function( elem, type ) {
var key = type + "queueHooks";
return data_priv.get( elem, key ) || data_priv.access( elem, key, {
empty: jQuery.Callbacks("once memory").add(function() {
data_priv.remove( elem, [ type + "queue", key ] );
})
});
} // 内部使用
});
// 提供给用户的挂载在jQuery对象上的方法
jQuery.fn.extend({
// 从队列中取数据或者向队列中推数据
queue: function( type, data ) {
var setter = 2;
// 如果type的类型不是string,说明用户没有传入type,默认使用fx前缀。
if ( typeof type !== "string" ) {
data = type;
type = "fx";
setter--;
}
// 如果参数长度小于setter,说明用户要么只传了type,要么就什么都没传。这个时候用户是想要得到栈中的数据。
if ( arguments.length < setter ) {
// 调用挂载到$上的方法,获取到栈中的数据返回
return jQuery.queue( this[0], type );
}
// 如果没有传data,则直接返回this?否则的话为this中的每一个元素都推入一份data到栈中
return data === undefined ?
this :
this.each(function() {
var queue = jQuery.queue( this, type, data );
// ?
jQuery._queueHooks( this, type );
// 如果type是fx(动画队列)并且队列的当前第一个元素不是inprogress,则取出当前队列的下一个元素并执行
// 难道说动画队列不需要每个方法执行一下dequeue方法,而是自动执行的?
if ( type === "fx" && queue[0] !== "inprogress" ) {
jQuery.dequeue( this, type );
}
});
},
dequeue: function( type ) {
// 执行对象中所有元素对应的队列中的下一个函数
return this.each(function() {
jQuery.dequeue( this, type );
});
},
delay: function( time, type ) {},
clearQueue: function( type ) {},
promise: function( type, obj ) {}
});
jQuery队列(二)的更多相关文章
- js进阶 13-5 jquery队列动画如何实现
js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...
- 微信生成二维码 只需一个网址即刻 还有jquery生成二维码
<div class="orderDetails-info"> <img src="http://qr.topscan.com/api.php?text ...
- jquery 生成二维码
jquery的二维码生成插件qrcode,在页面中调用该插件就能生成对应的二维码 <!DOCTYPE html> <html> <head> <meta ch ...
- MVC5中使用jQuery Post 二维数组和一维数组到Action
很久没有写了,最近在做一个MVC项目,这是我做的第一个MVC项目.之前可以说多MVC一点都不了解,今天把昨天遇到的一个问题记录下来.MVC大神就请飘过吧,跟我遇到同样问题的可以进来看看.遇到的第一个问 ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
- 强大的JQuery(二)--动画效果
上篇博客我们讲过了jquery的基础知识--强大的JQuery(一)--基础篇,作为web开发人员,网页的动画效果是不可缺少的,本篇博客重点来说说jquery的动画效果的实现. 因为动画的效果不能截图 ...
- 读jQuery之二十(Deferred对象)
Deferred对象是由$.Deferred构造的,$.Deferred被实现为简单工厂模式. 它用来解决JS中的异步编程,它遵循 Common Promise/A 规范.实现此规范的还有 when. ...
- 读jQuery之二十(Deferred对象)--(转)
原博文地址:http://www.cnblogs.com/snandy/archive/2012/12/19/2812935.html Deferred对象是由.Deferred构造的,.Deferr ...
- jQuery队列操作
jQuery.queue 1."fx"是什么? 队列动画的默认名称 队列的名字为type + "queue",默认是"fxqueue" 2. ...
随机推荐
- android位移动画的两种实现方式
在android开发,我们会常常使用到位移动画,普通情况下位移动画有两种实现方式.一种是直接通过java代码去实现,第二种是通过配置文件实现动画,以下是两种动画的基本是用法: 纯Java代码实现: / ...
- C# Image与Base64编码互转函数
public Bitmap GetImageFromBase64(string base64string) { byte[] b = Convert.FromBase64String(base64st ...
- HDU 5414 CRB and String (2015年多校比赛第10场)
1.题目描写叙述:点击打开链接 2.解题思路:本题要求推断字符串s是否能通过加入若干个字符得到字符串t. 首先,能够知道,s必须是t的一个子串(注意:不是连续子串). 第二.因为插入的新字符和它前面的 ...
- PHP文本操作
1. 用PHP获取文件指定行或者随机行 <?php /*** * 功能: 随机获取一个文件里的某一行 * 实现: 先将文件读进一个数组: 随机获取0~数组长度-1之间的一个随机数:以这个随机数做 ...
- MathType如何编辑大三角形符号
MathType中包含的符号超过1000多个,可以满足我们很多学科的使用,尤其是数学中,涉及到很多的符号,常见的就是代数.几何这两大类,当然还有集合之类的符号使用也比较多.我们在用MathType编辑 ...
- jquery.form 和MVC4做无刷新上传DEMO
jquery.form 和MVC4做无刷新上传DEMO HTML: <script src="~/Scripts/jquery-1.10.2.min.js"></ ...
- 缓存管理(本地缓存+memcached)
http://www.cnblogs.com/daizhj/archive/2009/11/17/1604436.html
- webpack流程图
- 用Eclipse编写Android程序的代码提示功能
用Eclipse编写Android程序的代码提示功能主要是在java和xml文件中,有时候会失效,默认的提示功能有限. 1)java文件自动提示 Window->Preferences- ...
- exchange 2003配置ASSP 反垃圾邮件
Exchange上第三方反垃圾邮件用得比较多的是ORF,它直接运行在虚拟SMTP服务上,配置非常的方便.ASSP(https://sourceforge.net/projects/assp/) 是一个 ...