JQuery 运用队列为动画模块服务,但好像它应该有更多用处,我觉得的,那试试就知道咯。

简单的来讲,它就是形成队列和出列,

也就因此可以进行很有规律的回调和延时了呀(暂停感觉有难度),当然这就是后面的事了,先来看看队列怎么玩吧。

function fn1() {console.log(1)}
function fn2() {console.log(2)}
function fn3() {console.log(3)} var elem = $('div')[0];
$.queue(elem, 'xxxx', fn1);
$.queue(elem, 'xxxx', fn2);
$.queue(elem, 'xxxx', fn3); // 每2秒调用一次$.dequeue,依次输出1,2,3
var Timer = setInterval(function() {
if($.queue(elem, 'xxxx').length > 0) {
$.dequeue(elem, 'xxxx')
} else {
clearTimeout(Timer);
}
}, 500);

可以看出,$.queue() 既是 setter 也是 getter(返回的是个数组)

另外值得一提的是,fn1 的参数问题,有点小奇怪,看一看就知道了

而至于 hooks,是 $.callback() 的一个小案例,也是个很好用的工具,以后会再开一章来进行分析学习。

// next(); 就能直接运行队列的下一个咯
function fn1(next, hooks) {console.log(1); next();}
function fn2(next, hooks) {console.log(2); next();}
function fn3(next, hooks) {console.log(3); next();}
var elem = $('div')[0];
$.queue(elem, 'xxxx', [fn1, fn2, fn3]);
$.dequeue(elem, 'xxxx');

$.queue() 也可以弄出 $.fn.queue() 这是很容易理解的,$.queue(elem, name, fnArr) 就等于 $(elem).queue(name, fnArr) 咯。

JQuery 动画队列的 name 是 “fx”,那我们是不是也可以来模拟一个类似的队列呢,比如插件 jquery.transit 的应用,原理如下(真TM拙劣 (ಥ_ಥ) )。

function fadeIn(next) {$(this).addClass('fadeIn').on('transitionend', next);}
function scale(next) {$(this).addClass('scale').on('transitionend', next);}
$('div').queue('transit', [fadeIn, scale]);
$('div').dequeue('transit');

同理,我们还能做出更多有点队列的栗子,回调地狱虽然可怕,但也可以写得很美的说(Promise 神马还没开始研究)

load('url', 'url');
function load() {
for(var a in arguments) {
$('div').queue('load', function(next){
_load(url, next);
});
}
function _load(url, next) {
$.post(url, function(){next();});
}
}

  

接着是 $.fn.delay(duration, queueName),很容易理解吧(不过好像试了下只能在加入队列时添加延时,而不能在队列函数内部书写)

同理,$.fn.delay(queueName, ifClearQueue, ifJumpToEnd) 也很方便理解(虽然确实可以暂停,但延时并未计算在内,也不像动画那种中途暂停,还有待研究)

(注意:上面两者是 $.fn 而不是 $. 哟,当不输入参数 queueName 时,默认是 'fx' 即动画队列。)

function fn1(next) {console.log(1);next();}
function fn2(next) {console.log(2);next();}
function fn3(next) {console.log(3);next();} var elem = $('div')[0];
$.queue(elem, 'xxxx', fn1);
$(elem).delay(1000,'xxxx');
$.queue(elem, 'xxxx', fn2);
$(elem).delay(1000, 'xxxx');
$.queue(elem, 'xxxx', fn3); $.dequeue(elem, 'xxxx'); setTimeout(function(){
$(elem).stop(true, true);
}, 1500);

  

就酱紫,队列真的是个很棒的概念,但队列的操作还不够完善,咱们拭目以待

随机推荐

  1. Eureka 2.0 闭源--选择Consul???

    在上个月我们知道 Eureka 2.0 闭源了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面 Spring Cloud 支持很多服务发现的软件,Eureka ...

  2. Web Services 平台元素

    Web Services 拥有三种基本的元素:SOAP.WSDL 以及 UDDI. 什么是 SOAP? 基本的 Web services 平台是 XML + HTTP. SOAP 指简易对象访问协议 ...

  3. selenium的元素定位-鼠标事件

    鼠标事件 ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 ActionChains 中存储的行为: context_click(): 右击: double_cl ...

  4. [Spring MVC]学习笔记--基础Servlet

    Servlet是一个用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端. Servlet的客户端提出请求并获得该请求的响应. 对于所有的客户端请求,只需要创建Servlet的实 ...

  5. 【BZOJ5056】OI游戏 最短路+有向图生成树计数

    [BZOJ5056]OI游戏 Description 小Van的CP最喜欢玩与OI有关的游戏啦~小Van为了讨好她,于是冥思苦想,终于创造了一个新游戏. 下面是小Van的OI游戏规则: 给定一个无向连 ...

  6. DataTable数据导出到Excel,并发送到客户端进行下载

    本代码实现思路是:页面显示和导出分开,导出的数据和用于页面显示的是同一查询数据方式,所以也是同样的数据,只是在导出数据时从数据库重新捞了一次数据.此导出数据方式会先将数据保存到Excel中,然后将创建 ...

  7. Directory和HashTable的区别

    1:单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.2:多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读 ...

  8. 2018.10.26-day5 python整理总结

    今日内容: 1.字典 2.id is == 3.小数据池 4.集合昨日回顾:1.列表:可变的 增:append//insert//extend//+//* 删:remove//pop//clear// ...

  9. dev 小问题列表

    1. MemoEdit > Lines Text lines are separated by line feed and carriage return characters ("\ ...

  10. 三、Nuxt项目目录结构

    使用IDE打开我们初始化完的新项目,然后发现目录如下图所示 现在来介绍一下每个目录和文件 .idea           是我使用的IDE是IDEA自动生成的,跟项目无关 .nuxt          ...