JQuery队列queue与原生模仿其实现

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

queue() 方法显示或操作在匹配元素上执行的函数队列。

queue和dequeue的过程主要是:

  1. 用queue把函数加入队列(通常是函数数组)k7娱乐城
  2. 用dequeue将函数数组中的第一个函数取出,并执行(用shift()方法取出并执行)

也就意味着当再次执行dequeue的时候,得到的是另一个函数了。同时也意味着,如果不执行dequeue,那么队列中的下一个函数永远不会执行。

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

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

01 <div id="block1">div 1</div>
02 <div id="block2">div 2</div>
03 <script type="text/javascript">
04     var FUNC=[
05         function() {$("#block1").animate({color:"=blue"},aniCB);},
06         function() {$("#block2").animate({color:"=red"},aniCB);},
07         function() {$("#block1").animate({color:"=yellow"},aniCB);},
08         function() {$("#block2").animate({color:"=grey"},aniCB);},
09         function() {$("#block1").animate({color:"=green"},aniCB);},
10         function(){alert("动画结束")}
11     ];
12     var aniCB=function() {
13         $(document).dequeue("myAnimation");
14     }
15     $(document).queue("myAnimation",FUNC)
16     //aniCB();
17 </script>
  1. 我首先建立了一个函数数组,里边是一些列需要依次执行的动画
  2. 然后我定义了一个回调函数,用dequeue方法用来执行队列中的下一个函数
  3. 接着把这个函数数组放到document上的myAnimation的队列中(可以选择任何元素,我只是为了方便而把这个队列放在document上)
  4. 最后我开始执行队列中的第一个函数

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

1 //清空队列
2 $(document).queue("myAnimation",[]);
3 //加一个新的函数放在最后
4 $(document).queue(“myAnimation”,function(){alert("动画真的结束了!")});

这当然也可以用于ajax之类的方法,如果需要一系列ajax交互,每个ajax都希望在前一个结束之后开始,之前最原始的方法就是用回调函数,但这样太麻烦了。同样利用queue添加队列,每次ajax之后的回调中执行一次dequeue即可。

jQuery中动画animate的队列实现,下面用JavaScript模仿一个:

view source

print?

01 function Queue(){
02     this.a = [];
03     this.t = null;
04 }
05 Queue.prototype = {
06     queue:function(s){
07         var self = this;
08         this.a.push(s);
09         this.hold();
10         return this;
11     },
12     hold:function(){
13         var self = this;
14         clearTimeout(this.t);
15         this.t = setTimeout(function(){
16             console.log("Queue start! ",self.a);
17             self.dequeue();
18         },0);
19     },
20     dequeue:function(){
21         var s = this.a.shift(),self = this;
22         if(s){
23             console.log("s:"+s);
24             setTimeout(function(){
25                 console.log("end:"+s);
26                 self.dequeue();
27             },s);
28         }
29     }
30 };
31  
32 var a = newQueue().queue(500).queue(200).queue(400).queue(1500).queue(300).queue(2000);
时间: 2024-08-11 03:38:00

JQuery队列queue与原生模仿其实现的相关文章

jquery源码解析:jQuery队列操作queue方法实现的原理

我们先来看一下jQuery中有关队列操作的方法集: 从上图可以看出,既有静态方法,又有实例方法.queue方法,相当于数组中的push操作.dequeue相当于数组的shift操作.举个例子: function aaa(){ alert(1); } function bbb(){ alert(2); } $.queue(document,"q1",aaa);   //在document下创建一个队列q1,并往q1队列中添加aaa函数. $.queue(document,"q1

jquery 的动画列表、jquery的queue、dequeue用法

//1,我首先建议了一个函数数组,里边是一些列需要依次执行的动画 //2,然后我定义了一个回调函数,用dequeue方法用来执行队列中的下一个函数 //3,接着把这个函数数组放到document上的myAnimation的队列中(可以选择任何元素,我只是为了方便而把这个队列放在document上) //4,最后我开始执行队列中的第一个函数这样做的好处在于函数数组是线性展开,增减起来非常方便. var FUNC=[ function() {$(".p1").animate({'width

复习css3的部分属性和jquery的queue方法

利用css3实现一个半月形的西瓜,利用queue实现吃西瓜的动画.练习例子 css3: 1.圆角 border-radius:100%; border-top-left-radius:5px; 2.变形 2D旋转:transform: rotate(25deg);(正角度为顺时针,负角度为逆时针). 3D旋转:transform: rotateX(25deg);-----效果为div的高度变小,90deg时高度为0. 3D旋转:transform: rotateY(25deg);-----效果为

关于Plupload结合上传插件jquery.plupload.queue的使用

方便日后查阅!! 事例代码: @import url(common/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css) ; src="http://www.iadpush.com/assets/common/jquery-1.8.2.min.js"> src="http://bp.yahooapis.com/2.4.21/browserplus-min.js"> src="

【C++】容器适配器实现队列Queue的各种功能(入队、出队、判空、大小、访问所有元素等)

适配器: 将一个通用的容器转换为另外的容器,所谓的容器,指的是存放数据的器具,像我们知道的顺序表和链表都是容器Container.举个例子解释一下吧,我们的电压都是220v,而像充电线就起到转换到合适的电压的作用.而这里,我们的主角就是将通用的链表结构转换为来实现队列Queue这一数据结构,(意思就是,链表还可以去实现其他的数据结构). 在线性表中,分为链表和顺序表,我们知道其中的差别: 链表:节点灵活,使得插入删除元素方便灵活,但是对于单链表若有节点指针_head._tail,查找元素较为麻烦

jQuery队列动画

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>jQuery队列动画</title> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script

使用C#的泛型队列Queue实现生产消费模式

本篇体验使用C#的泛型队列Queue<T>实现生产消费模式. 如果把生产消费想像成自动流水生产线的话,生产就是流水线的物料,消费就是某种设备对物料进行加工的行为,流水线就是队列. 现在,要写一个体现生产消费模式的泛型帮助类,比如叫ProducerConsumer<T>. 该类肯定会维护一个有关生产.物料的Queue<T>类型的字段,还存在一个有关消费.Action<T>类型的字段. 在ProducerConsumer类的构造函数中,为Action<T&

Python--线程队列(queue)、multiprocessing模块(进程对列Queue、管道(pipe)、进程池)、协程

队列(queue) 队列只在多线程里有意义,是一种线程安全的数据结构. get与put方法 ''' 创建一个"队列"对象 import queue q = queue.Queue(maxsize = 10) queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限.可通过Queue的构造函数的可选参数maxsize来设定队列长度.如果maxsize小于1就表示队列长度无限. 将一个值放入队列中: q.put() 调用队列对象的put()方法在队尾插入一个项目.put()

ZooKeeper实现分布式队列Queue

ZooKeeper实现分布式队列Queue 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让Hadoop集群跑在VPS虚拟主机上,通过云向用户提供存储和计算的服务. 现在硬件越来越便宜,一台非品牌服务器,2颗24核CPU,配48G内存,2T的硬盘,已经降到2万块人民币以下了.这种配置如果简单地放几个web应用,显然是奢侈的浪费.就算是用来实现单节点的hadoop,对计算资源浪费也是非常高的.对于这么高性能的计算机,如何有效利用计算资源,就成为成本控制的一项重要议题了. 通过