`

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

 
阅读更多
jQuery 遍历 - jQuery.queue() 方法: http://www.w3school.com.cn/jquery/data_jquery_queue.asp
jQuery中queue和dequeue的用法 http://blog.csdn.net/hdchangchang/article/details/8085887

原文:http://mrthink.net/jqueryapi-queue-dequeue/
jQuery核心中, 有一组队列控制方法, 这组方法由queue()/dequeue()/clearQueue()三个方法组成, 它对需要连续按序执行的函数的控制可以说是简明自如, 主要应用于animate ()方法, ajax以及其他要按时间顺序执行的事件中.
先解释一下这组方法各自的含义.
queue(name,[callback]):
  1.当只传入一个参数时, 它返回并指向第一个匹配元素的队列(将是一个函数数组,队列名默认是fx);
  2.当有两个参数传入时, 第一个参数还是默认为fx的的队列名, 第二个参数又分两种情况,
     A: 当第二个参数是一个函数时, 它将在匹配的元素的队列最后添加一个函数.
     B: 当第二个参数是一个函数数组时,它将匹配元素的队列用新的一个队列来代替(函数数组).可能, 这个理解起来有点晕, 稍后, 后面会有点此查看DEMO.

dequeue(name): 这个好理解, 就是从队列最前端移除一个队列函数, 并执行它.

clearQueue([queueName]):这是1.4新增的方法. 清空对象上尚未执行的所有队列. 参数可选,默认为fx. 但个人觉得这个方法没多大用, 用queue()方法传入两个参数的第二种参数即可实现clearQueue方法.

现在, 我们要实现这样一个效果, 有标有1至7的数字方块, 要求这七个方块自左到右依次下落.
Demo:http://mrthink.net/demo/ijq20101129.htm


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()方法直接将现在的函数列队替换成[]空数组实现(个人比较推荐空数组替换.,更直观).
分享到:
评论

相关推荐

    Jquery队列动画特效

    **jQuery队列动画特效详解** 在前端开发中,jQuery库以其简洁易用的API和强大的功能深受开发者喜爱。尤其在处理动画效果时,jQuery的队列功能提供了灵活且高效的解决方案。本文将深入探讨jQuery队列函数的使用以及...

    jQuery中队列queue()函数的实例教程_.docx

    jQuery中的队列功能是通过`queue()`函数实现的,它允许开发者控制JavaScript函数的执行顺序,特别是对于动画效果的管理非常有用。队列是按照先进先出(FIFO)的原则工作的,即先加入队列的函数会先被执行。在jQuery...

    jQuery1.8.0学习文档 详解

    - queue(element,[queueName])、dequeue([queueName])和clearQueue([queueName]):用于操作jQuery的动画队列。 - jQuery.noConflict([extreme]):允许在其他JavaScript库之后使用jQuery,解决库之间的冲突。 在...

    jQuery动画详解

    动画默认按照添加到队列的顺序执行,但可以使用`queue()`和`dequeue()`来管理动画队列。`clearQueue()`可以清空队列,`stop()`则用于停止当前运行的动画。 6. **回调函数** 在动画结束时,可以传递一个回调函数,...

    JQuery最新版速查表

    3. **队列控制**:`$.queue()`和`.dequeue()`用于管理动画队列,`.stop([clearQueue], [jumpToEnd])`停止当前动画。 ### 四、Ajax交互 1. **$.ajax()**:这是核心的Ajax函数,可以完全控制异步请求。例如: ```...

    jquery标准文档

    3. 动画队列:`.queue()`, `.dequeue()`, `.clearQueue()`, `.promise()`管理动画队列,实现复杂的同步动画。 五、Ajax交互 1. GET与POST请求:`.get()`, `.post()`用于发送异步请求,`.load()`用于加载远程HTML...

    jquery快速学三(事件与动画)

    9. 动画队列:jQuery的动画默认是同步进行的,但可以通过`.queue()`和`.dequeue()`来控制动画的执行顺序,实现更复杂的动画效果。 10. 动画状态管理:`.stop()`用于停止当前运行的动画,`.clearQueue()`清除动画...

    jquery API

    2. 队列控制:`$(element).queue(name, function(next) {...})`添加到队列,`$(element).dequeue(name)`执行队列中的下一个函数,`$(element).clearQueue(name)`清空队列。 四、jQuery AJAX 1. 异步请求:`$.ajax...

    jQuery技术文档程序大全

    - **队列管理**: `queue()`, `dequeue()`, `clearQueue()`控制动画执行顺序。 4. **Ajax交互** - **$.ajax()**: 核心Ajax方法,支持GET和POST请求以及其他HTTP方法。 - **$.get()**和**$.post()**: 简化的GET和...

    免费jquery animate小用例

    若想跳过队列,可以使用`.queue()`或`.dequeue()`方法。 - 使用`stop()`方法可以停止当前正在运行的动画,`clearQueue()`则可以清除动画队列。 4. **自定义缓动函数**: - 缓动函数决定了动画从开始到结束的速度...

    JQuery 中文API

    13. **队列管理**: `.queue()`、`.dequeue()`和`.clearQueue()`用于控制动画队列,`.delay()`添加延迟。 **四、AJAX** 14. **$.ajax()**: 这是jQuery进行异步请求的主要方法,支持GET、POST等多种HTTP方法,可...

    Jquery中文手册

    3. **队列控制**: `$(element).queue(function(next) {...})` 插入队列操作,`$(element).dequeue()` 执行队列中的下一个操作,`$(element).stop([clearQueue], [jumpToEnd])` 停止当前动画。 六、Ajax交互 1. **$...

    JQuery 动画

    - **`.queue()`**、**`.dequeue()`**、**`.clearQueue()`**: 这些函数用于管理和控制元素的动画队列。例如,当多个动画连续执行时,可以使用这些函数来控制动画的执行顺序。 #### 五、示例代码解析 下面是对示例...

Global site tag (gtag.js) - Google Analytics