Jquery中的队列函数quene()、dequene()、clearQuene()

jQuery中的queue和dequeue是一组很有用的方法,他们对于一系列需要按次序运行的函数特别有用。特别animate动画,ajax,以及timeout等需要一定时间的函数。

在调用quene之前如果有调用动画函数,将已经从产生了默认的队列fx,quene的操作是在这个的基础上的。

queue和dequeue的过程主要是:
1,用queue把函数加入队列(通常是函数数组)
2,用dequeue将函数数组中的第一个函数取出,并执行(用shift()方法取出并执行)

queue(name,[callback]): 当只传入一个参数时,如果参数是队列名,它返回并指向第一个匹配元素的队列(将是一个函数数组),当参数是函数时,将会该函数加到默认队列fx中; 当有两个参数传入时, 第一个参数是队列名, 第二个参数又分两种情况, 当第二个参数是一个函数时, 它将在匹配的元素的队列最后添加一个函数. 当第二个参数是一个函数数组时,它将匹配元素的队列用新的一个队列来代替(函数数组).quene既可以进行读操作又可以进行写操作。
dequeue(name): 这个好理解, 就是从队列最前端移除一个队列函数, 并执行它.也就意味着当再次执行dequeue的时候,得到的是另一个函数了同时也意味着,如果不执行dequeue,那么队列中的下一个函数永远不会执行
clearQueue([queueName]):这是1.4新增的方法. 清空对象上尚未执行的所有队列. 参数可选,默认为fx. 但个人觉得这个方法没多大用, 用queue()方法传入两个参数的第二种参数即可实现clearQueue方法.

对于一个元素上执行animate方法加动画,jQuery内部也会将其加入名为 fx 的函数队列
而对于多个元素要依次执行动画,则必须我们手动设置队列进行了。

1、一个例子,要两个div依次向左移动

div {

background:#aaa;

width:18px;

height:18px;

position:absolute;

top:10px;

}

如果只是轮流移动次数较少,可以使用animate的回调函数来做,一个动画放在另一个动画的回调里边,比如

$(“#block1″).animate({left:”+=100″},function() {

$(“#block2″).animate({left:”+=100″},function() {

$(“#block1″).animate({left:”+=100″},function() {

$(“#block2″).animate({left:”+=100″},function() {

$(“#block1″).animate({left:”+=100″},function(){

alert(“动画结束”);  )};)};)};)};)}
但这种方法当动画较多的时候如果要调换动画函数的执行顺序或者是新添加动画函数将会改动比较大。 此时利用queue和dequeue则显得简单很多:

var FUNC=[

function() {$("#block1").animate({left:"+=100"},aniCB);},

function() {$("#block2").animate({left:"+=100"},aniCB);},

function() {$("#block1").animate({left:"+=100"},aniCB);},

function() {$("#block2").animate({left:"+=100"},aniCB);},

function() {$("#block1").animate({left:"+=100"},aniCB);},

function(){alert("动画结束")}

];

var aniCB=function() {

$(document).dequeue(“myAnimation”);

}

$(document).queue(“myAnimation”,FUNC);

aniCB();

2、Var n=$(document).quene(“myAinmation”),将返回一个函数数组。

3、$(document).quene(“fx”,”FUNC”),原队列将会被FUNC数组函数代替。

4、 $(document).queue(“myAnimation”,function(){alert(“动画真的结束了!”)});  //加一个新的函数放在最后

1,首先建议建立了一个函数数组,里边是一些列需要依次执行的动画
2,然后定义一个函数,用dequeue方法用来执行队列中的下一个函数
3,接着把这个函数数组放到document上的myAnimation的队列中(可以选择任何元素,我只是为了方便而把这个队列放在document上)
4,最后我开始执行队列中的第一个函数

5,最为重要的是一定记得在每个动画的回调函数中一定要继续调用dequene,否则下面的动画将无法执行。

这样做的好处在于函数数组是线性展开,增减起来非常方便。而且,当不要要继续进行接下来动画的时候(比如用户点了某个按钮),只需要清空那个队列即可。而要增加更多则只需要加入队列即可。

//清空队列

$(document).queue(“myAnimation”,[]);  第一种方式如上所示直接给要清空的队列赋一个空数组,另外一种方式是$(document).clearQueue()

时间: 2024-10-29 04:12:09

Jquery中的队列函数quene()、dequene()、clearQuene()的相关文章

jquery中的 $(function(){ .. }) 函数

2017-04-29 在讲解jquery中的 $(function(){ .. }) 函数之前,我们先简单了解下匿名函数.匿名函数的形式为:(function(){ ... }),又如 function(arg){ ... };定义了 一个参数为 arg 的匿名函数,然后使用 (function(arg){ ... })(param) 来调用这个函数,其中 param 是传入这个匿名函数的参数. 但需要主要匿名函数与jquery中的 $(function(){ ...}) 函数的区别:$(fun

关于jQuery中的submit()函数

关于jQuery中的submit()函数(绑定event handler or 触发event?) 今天在敲代码的时候无意间碰到了一个比较绕的问题(一个小师弟问的问题),思前想后都不明白,上午百度.谷歌了半天,再加上读了下英文api才算明白开来.现在记下来,给大家做个提醒.废话不多说,代码如下: 1 $('#myFormId').submit(function() { 2 // submit the form 3 $(this).ajaxSubmit(); 4 // return false,这

jquery'中的匿名函数

  //jquery'中的匿名函数 (function(){ alert("this is a test"); })(); //和这个基于jQuery的比较下: $(function(){ alert("this is a test"); }); jquery'中的匿名函数

自己写的一个类似于jQuery中的toggle函数

这是HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>公共测试页</title> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <script ty

JQuery中的回调函数不被执行问题的原因

1 $.post(handleUrl, {mid:mid}, function(data) 2 { 3 alert('call back'); 4 }, 'json'); 非常简单的一句回调,再贴上php的处理代码: 1 public function intend($mid=0) 2 { 3 p($mid); 4 $this->ajaxReturn('','',1); 5 } firebug显示200相应的情况下,死活不弹出call back的提示框,几经周折,问题解决.问题出在 p($mid

jquery中的each函数和map函数的区别

jquery中的each函数和map函数的用法看起来差不多,但其实还是有一点区别的. 其中一个重要的区别是,each返回的是原来的数组,并不会新创建一个数组.而map方法会返回一个新的数组.如果在没有必要的情况下使用map,则有可能造成内存浪费. 例如: var items = [1,2,3,4];  $.each(items, function() {  alert('this is ' + this);  });  var newItems = $.map(items, function(i

转: jquery中ajax回调函数使用this

原文地址:jquery中ajax回调函数使用this 写ajax请求的时候success中代码老是不能正常执行,找了半天原因.代码如下 1 $.ajax({type: 'GET', 2 url: "/flag/", 3 data: dat, 4 success:function(){ 5 $(this).prevAll('p').css("text-decoration","line-through"); 6 } 7 }); 最后发现是ajax中

web前端之JavaScript之jquery中的回调函数

回调函数指的是被调用者完成处理后自动回调调用者预先传递的函数. 在类C语言中通常通过函数指针/引用的方式传递. jQuery也提供类似的回调函数机制.但是如何正确传递回调函数仍然值得一提. 在John(jQuery Founder)写的指南中有详细的介绍. 1.不带参数的回调 $.get('myhtmlpage.html', myCallBack); 其中myCallBack是函数名字.函数是javascript的基础.可以当作引用变量一样传递. 2.带参数的回调 很自然的,按照以往的经验,我们

JQuery中的工具函数总结

前提引入 前提当然也是要引入Jquery啦... <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script> 工具方法 ①获取浏览器的名称与版本信息 在jQuery中,通过$.browser对象可以获取浏览器的名称和版本信息,如$.browser.chrome为true,表示当前为Chrome浏览器,$.browser.