jQuery队列控制方法详解queue()/dequeue()/clearQueue()


Posted in Javascript onDecember 02, 2010

先解释一下这组方法各自的含义.
queue(name,[callback]): 当只传入一个参数时, 它返回并指向第一个匹配元素的队列(将是一个函数数组,队列名默认是fx); 当有两个参数传入时, 第一个参数还是默认为fx的的队列名, 第二个参数又分两种情况, 当第二个参数是一个函数时, 它将在匹配的元素的队列最后添加一个函数. 当第二个参数是一个函数数组时,它将匹配元素的队列用新的一个队列来代替(函数数组).可能, 这个理解起来有点晕, 稍后, 后面会有点此查看DEMO.

dequeue(name): 这个好理解, 就是从队列最前端移除一个队列函数, 并执行它.
clearQueue([queueName]):这是1.4新增的方法. 清空对象上尚未执行的所有队列. 参数可选,默认为fx. 但个人觉得这个方法没多大用, 用queue()方法传入两个参数的第二种参数即可实现clearQueue方法.
现在, 我们要实现这样一个效果, 有标有1至7的数字方块, 要求这七个方块自左到右依次下落.点此查看DEMO

jQuery队列控制方法详解queue()/dequeue()/clearQueue()

css与html部分我就不贴出来了,DEMO演示中有. 若按常规做法, 可能需要用如下jQ代码来实现:

$('.one').delay(500).animate({top:'+=270px'},500,function(){
		$('.two').delay(500).animate({top:'+=270px'},500,function(){
			$('.three').delay(500).animate({top:'+=270px'},500,function(){
				$('.four').delay(500).animate({top:'+=270px'},500,function(){
					$('.five').delay(500).animate({top:'+=270px'},500,function(){
						$('.six').delay(500).animate({top:'+=270px'},500,function(){
							$('.seven').animate({top:'+=270px'},500,function(){
								alert('按序落体运动结束! Yeah!')
							});
						});
					});
				});
			});
		});
	});

嗯, 没错, 效果很完美的呈现给出来了, 但这种晕眩的代码, 你能忍受吗? 即便可以忍受, 如果此时, 你想调换一个某个的执行顺序, 比如, 你想让5落下后再开始下落3, 或者新加8至15八个方块, 怎么办? 重写吗? 在里面小心冀冀的改吗? 显然, 我们需要另外一种列简明便捷的方法来实现这个效果, 那就是jQuery队列控制方法.请看如下代码:

var _slideFun=[
	function(){$('.one').delay(500).animate({top:'+=270px'},500,_takeOne);},
	function(){$('.two').delay(300).animate({top:'+=270px'},500,_takeOne);},
	function(){$('.three').delay(300).animate({top:'+=270px'},500,_takeOne);},
	function(){$('.four').delay(300).animate({top:'+=270px'},500,_takeOne);},
	function(){$('.five').delay(300).animate({top:'+=270px'},500,_takeOne);},
	function(){$('.six').delay(300).animate({top:'+=270px'},500,_takeOne);},
	function(){$('.seven').delay(300).animate({top:'+=270px'},500,function(){
		alert('按序落体运动结束! Yeah!');
	});}
];
$('#demo').queue('slideList',_slideFun);
var _takeOne=function(){
	$('#demo').dequeue('slideList');
};
_takeOne();

这样一来, 看起来是不是简明多了. 如何实现?
1. 新建一个数组,把动画函数依次放进去(这样更改顺序,新加动画是不是方便多了?);
2. 用queue将这组动画函数数组加入到slideList队列中;
3. 用dequeue取出slideList队列中第一个函数, 并执行它;
4. 初始执行第一个函数.
DEMO演示中也有详解的注释, 如果上面的说明还看不明白,请看源码.
至于clearQueue()方法,就不多说了, 演示中停止按钮调用的就是clearQueue()方法,当然你还可以用queue()方法直接将现在的函数列队替换成[]空数组实现(个人比较推荐空数组替换.,更直观).

Javascript 相关文章推荐
javascript 中__proto__和prototype详解
Nov 25 Javascript
jQuery中:selected选择器用法实例
Jan 04 Javascript
jQuery显示和隐藏 常用的状态判断方法
Jan 29 Javascript
浅谈JavaScript异常处理语句
Jun 26 Javascript
javascript执行环境及作用域详解
May 05 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
Jul 15 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 Javascript
JS实现颜色梯度与渐变效果完整实例
Dec 30 Javascript
react-router JS 控制路由跳转实例
Jun 15 Javascript
详解在create-react-app使用less与antd按需加载
Dec 06 Javascript
ES6中Promise的使用方法实例总结
Feb 18 Javascript
vant中的toast层级改变操作
Nov 04 Javascript
JQuery 弹出框定位实现方法
Dec 02 #Javascript
Jquery replace 字符替换实现代码
Dec 02 #Javascript
jquery json 实例代码
Dec 02 #Javascript
JavaScript格式化数字的函数代码
Nov 30 #Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
Nov 30 #Javascript
基于prototype扩展的JavaScript常用函数库
Nov 30 #Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
Nov 30 #Javascript
You might like
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
AngularJS快速入门
2015/04/02 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
vue实现引入本地json的方法分析
2018/07/12 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
详解Python中with语句的用法
2015/04/15 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
Selenium的使用详解
2018/10/19 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
python3人脸识别的两种方法
2019/04/25 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
素食餐饮项目创业计划书
2014/02/02 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
三孔导游词
2015/02/05 职场文书
实施意见格式范本
2015/06/05 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL