jquery队列queue与原生模仿其实现方法分享


Posted in Javascript onMarch 25, 2014

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

queue和dequeue的过程主要是:

用queue把函数加入队列(通常是函数数组)
用dequeue将函数数组中的第一个函数取出,并执行(用shift()方法取出并执行)
也就意味着当再次执行dequeue的时候,得到的是另一个函数了。同时也意味着,如果不执行dequeue,那么队列中的下一个函数永远不会执行。

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

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

<div id="block1">div 1</div>
<div id="block2">div 2</div>
<script type="text/javascript">
 var FUNC=[
  function() {$("#block1").animate({color:"=blue"},aniCB);},
  function() {$("#block2").animate({color:"=red"},aniCB);},
  function() {$("#block1").animate({color:"=yellow"},aniCB);},
  function() {$("#block2").animate({color:"=grey"},aniCB);},
  function() {$("#block1").animate({color:"=green"},aniCB);},
  function(){alert("动画结束")}
 ];
 var aniCB=function() {
  $(document).dequeue("myAnimation");
 }
 $(document).queue("myAnimation",FUNC)
 //aniCB();
</script>

我首先建立了一个函数数组,里边是一些列需要依次执行的动画
然后我定义了一个回调函数,用dequeue方法用来执行队列中的下一个函数
接着把这个函数数组放到document上的myAnimation的队列中(可以选择任何元素,我只是为了方便而把这个队列放在document上)
最后我开始执行队列中的第一个函数
这样做的好处在于函数数组是线性展开,增减起来非常方便。而且,当不要要继续进行接下来动画的时候(比如用户点了某个按钮),只需要清空那个队列即可。而要增加更多则只需要加入队列即可。

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

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

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

function Queue(){
 this.a = [];
 this.t = null;
}
Queue.prototype = {
 queue:function(s){
  var self = this;
  this.a.push(s);
  this.hold();
  return this;
 },
 hold:function(){
  var self = this;
  clearTimeout(this.t);
  this.t = setTimeout(function(){
   console.log("Queue start! ",self.a);
   self.dequeue();
  },0);
 },
 dequeue:function(){
  var s = this.a.shift(),self = this;
  if(s){
   console.log("s:"+s);
   setTimeout(function(){
    console.log("end:"+s);
    self.dequeue();
   },s);
  }
 }
};
var a = new Queue().queue(500).queue(200).queue(400).queue(1500).queue(300).queue(2000);
Javascript 相关文章推荐
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
Summernote实现图片上传功能的简单方法
Jul 11 Javascript
jQuery生成假加载动画效果
Dec 01 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
Feb 03 Javascript
jQuery基本选择器和层次选择器学习使用
Feb 27 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
bootstrap弹出层的多种触发方式
May 10 Javascript
React操作真实DOM实现动态吸底部的示例
Oct 23 Javascript
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
详解如何在vue项目中使用layui框架及采坑
May 05 Javascript
layui异步加载table表中某一列数据的例子
Sep 16 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
Sep 02 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
Mar 25 #Javascript
jquery的each方法使用示例分享
Mar 25 #Javascript
提取jquery的ready()方法单独使用示例
Mar 25 #Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
Mar 25 #Javascript
jquery解析xml字符串示例分享
Mar 25 #Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 #Javascript
jquery选择器原理介绍($()使用方法)
Mar 25 #Javascript
You might like
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
Python print不能立即打印的解决方式
2020/02/19 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
英文翻译的自我评价语句
2013/10/04 职场文书
大专生的学习自我评价
2013/12/04 职场文书
中秋节超市促销方案
2014/01/30 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
python实现的人脸识别打卡系统
2021/05/08 Python
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python