我们先来看它的思路:把控制不透明度和控向上移动的动画分别存储在两个队列中,控制向上移动的队列按默认情况进行(在2000毫秒内完成),而不透明度的控制在1000毫秒内执行,但这个队列要晚于默认队列1000毫秒执行

再简单一点,就是:前1000毫秒,只有控制高度的“fx”队列执行,而后1000毫秒,控制不透明度的“fader”队列和控制高度的“fx”并行

首先准备两个队列,

一个是默认的"fx",存储高度变化动画:

.animate({top: "-=40"}, {duration: 2000})

用来另一个是自定义的"fader"的队列,来存储不透明度变化的动画:

.animate({opacity: 0}, {duration: 1000, queue: false});

注意上面这段代码中的"queue:false",这是很关键的一句话,目的是让这个animate不进入默认的"fx"队列中

任何的动画效果都会进入"fx"队列中,即使你定义在.queue()中的动画也是一样,并且动画效果,务必会按顺序执行,比如说下面这段代码:

$('#object').slideUp(1000)<br>               .slideDown(1000)<br>               .animate({width: '50px'}, {duration: 1000});

运行后它只会按照顺序来执行,先收起,再放下,再把宽度收缩为50px

但是一旦我加入了"queue:false"这个参数:

$('#section3a').slideUp(1000)
            .slideDown(1000)
            .animate({width: '50px'}, {duration: 1000, queue: false});

你会发现在收缩放下的同时,object的宽度也在收缩

本来线性执行的slideUp,slideDown,animate,变成了animate和slideUp,slideDown并行:

运行结果如下

 
 

本例完整代码:

OK,我们回过头来再看实战中的这个例子:

$("#object")
.delay(1000, "fader")
.queue("fader", function(next) {
    $(this).animate({opacity: 0},
        {duration: 1000, queue: false});
    next();
})
.dequeue("fader")
.animate({top: "-=40"}, {duration: 2000})

其实前三个语句(这里所说的语句以"."为区分标志),做了这么几件事:

定义一个名为fader的队列,专用于控制不透明度的改变——.queue()语句

让它1000毫秒后执行——.delay()延时函数,延时fader队列的执行时间;.dequeue执行fader队列。

而最后的.animate则是默认进行的,不用管它。一起来看看效果,左边的是正确的,右边的是错误的(可能在IE6中有布局错位的情况,因为是jQuery例子,时间有限,也就不追究css的错误了吧……):

true
false
 

本例完整代码:

好的,queue的主要功能就介绍到这里,下面还有点时间,介绍一些非主流功能:

获取队列长度

比如用队列名取得匹配元素的长度:

var $queue=$("div").queue('fx');

很明显,就是取得队列名为'fx'的队列,如果想取得长度的话:

var $length=$('div').queue('fx').length;

注意这里的队列长度只是匹配元素还未运行的队列长度,当动画运行完之后,队列长度会自动归为0,举下面一个例子:

function animateT(){
    $("#section2-div").slideToggle('3000')
    .slideToggle('3000')
    .hide('3000')
    .show('3000')
    .animate({left:'+=200'},2000)
    .hide('3000')
    .show('3000')
    .animate({left:'-=200'},2000,animateT);//在这轮动画结束的时候再调用自己,使动画无限循环下去         
            }

然后当点击按钮的时候显示队列的长度:

$("#section2-input").click(function(){
    var $queue=$("#section2-div").queue('fx');
    $('#section2-h1').text($queue.length);
});

效果:

0

 
 

点击按钮就可以看见实时队列的长度

本例源码:

替换队列

queue还有一种用法是替换队列,就是自定义一个队列后,用自定义的队列替换元素原匹配的队列:

比如你给某个元素定义了两个队列:

$('div').queue('fx',function(){
       $('div').slideDown('slow')
                 .slideUp('slow')
                 .animate({left:'+=100'},4000);
});//定义fx
$('div').queue('fx2',function(){
       $('div').slideDown('fast')
                 .slideUp('fast')
                 .animate({left:'+=100'},1000);
});//定义fx2

这里定义了两个队列,一个是慢队列,也就是默认的'fx',另一个是快队列'fx2'

当点击某个按钮时:

$('input').click(function(){
    $('div').queue('fx',fx2);
});

很简单吧,明显用fx2替换了fx,当然这也不是立即替换,如果fx还没有执行完的话。除非你用stop()函数(我们下节课介绍)。

总结

OK,今天对queue 的讲解就到这里,肯定有很多疏漏的地方,希望大家多多指证,上面的这些用法是我总结出来,应该算是比较主流的用法吧。如果还有一些我没有提到,或是有什么问题想交流,都可以留言给我。

参考的资料有jQuery官方文档说明 ,Cameron McKay的博客,《犀利开发jQuery》

下节课我打算向大家介绍stop()函数,也是我栽过跟头的地方。

http://qurtyy.blog.163.com/blog/static/5744368120130221419244/的更多相关文章

  1. http://love3400wind.blog.163.com/blog/static/7963080120132794359703/

    http://love3400wind.blog.163.com/blog/static/7963080120132794359703/

  2. 组合,关联,聚合的区别(转自http://jimmyleeee.blog.163.com/blog/static/9309618200932014422932/)

    类间关系 在类图中,除了需要描述单独的类的名称.属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义.在UML类图中,关系用类框之间的连 ...

  3. GRIB格式转换心得(转自博客:http://windforestwing.blog.163.com/blog/static/19545412007103084743804/)

    1.wgrib的使用 在cmd命令行下键入wgrib后即可察看wgrib相关命令参数,简要介绍如下: l        Inventory/diagnostic–output selections 详 ...

  4. blender_(uv应用)................http://digitalman.blog.163.com/blog/static/23874605620174172058299/

    轻松学习Blender基础入门之九:UV-1 2017-06-21 14:24:49|  分类: Blender |举报 |字号 订阅     下载LOFTER 我的照片书  |   [前言]     ...

  5. node.js(API解读) - process (http://snoopyxdy.blog.163.com/blog/static/60117440201192841649337/)

    node.js(API解读) - process 2011-10-28 17:05:34|  分类: node |  标签:nodejs  nodejsprocess  node.jsprocess  ...

  6. 转发真阿当老师的一片文章 受益匪浅 (出处:http://cly84920.blog.163.com/blog/static/24750013320158203575958/)

    忽悠程序员做一辈子程序员,以白胡子白头发hacker为目标的人有两种: 1,自己不写程序,但需要有将才为自己打下手的人,这种人往往看他资质和勤奋均平平,却成了你领导.别不服,这种人虽不见得有帅才的能力 ...

  7. 二叉树——根据遍历结果,画出对应的二叉树 转载至:http://canlynet.blog.163.com/blog/static/255013652009112602449178/

    这道题目很经典,具体如下: 已知遍历结果如下,试画出对应的二叉树: 前序:A B C E H F I J D G K 中序:A H E C I F J B D K G 解题要点: 1.前序.中序.后序 ...

  8. http://blog.163.com/zhangmihuo_2007/blog/static/27011075201392685751232/

    http://blog.163.com/zhangmihuo_2007/blog/static/27011075201392685751232/

  9. http://blog.163.com/eugeneheen_chen@126/blog/static/120812157201291994916866/

    http://blog.163.com/eugeneheen_chen@126/blog/static/120812157201291994916866/

随机推荐

  1. git本地分支和远程分支改名

    #1 将本地分支进行改名 git branch -m old_branch new_branch #2 将远程分支的老分支删除 git push origin :old_branch #3 将改名后的 ...

  2. Python_oldboy_自动化运维之路(四)

    本节内容 集合 字符编码与转码 函数语法及基本特性 函数参数与局部变量 返回值和嵌套函数 递归 匿名函数 高阶函数 1.集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变 ...

  3. svn 批量添加命令

    svn st | awk '{if ($1 == "?") {print $2} }' | xargs svn add

  4. bash常用快捷键和命令

    在使用Linux的时候,最常见的终端解释器就是bash了.bash下有很多技巧,我知道这么几个: 0.关于按键模式bash默认的按键模式是emacs风格的.你也可以通过set -i vi设定为vi风格 ...

  5. ETL工具kettle基本使用

    1.下载kettle:https://sourceforge.net/projects/pentaho/files/Data%20Integration/7.0/pdi-ce-7.0.0.0-25.z ...

  6. android练习

    package com.example.wang.testapp2; import android.app.AlertDialog; import android.content.DialogInte ...

  7. HBase(九)HBase表以及Rowkey的设计

    一 命名空间 1 命名空间的结构 1) Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定, 则在 default 默认的命名空间中. 2) RegionServer g ...

  8. Web前端开发最佳实践(9):CSS代码太太乱,重复代码太多?你需要精简CSS代码

    前言 提高网站整体加载速度的一个重要手段就是提高代码文件的网络传输速度.之前提到过,所有的代码文件都应该是经过压缩了的,这可提高网络传输速度,提高性能.除了压缩代码之外,精简代码也是一种减小代码文件大 ...

  9. MemSQL Start[c]UP 2.0 - Round 1 F - Permutation 思维+线段树维护hash值

    F - Permutation 思路:对于当前的值x, 只需要知道x + k, x - k这两个值是否出现在其左右两侧,又因为每个值只有一个, 所以可以转换成,x+k, x-k在到x所在位置的时候是否 ...

  10. Django实战(7):改造ProductList界面

    有了上一节关于Django模板的基础,改造界面就很容易理解了.将界面设计师设计的页面中的内容根据复用程度分别放到基础模板base.html和专用模板productlist.html中. depot/t ...