`
张玉龙
  • 浏览: 722568 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

jQuery动画高级用法(下)

 
阅读更多
jQuery动画高级用法(下)——详解animation中的.queue()函数2011-09-19 20:00自定义队列

我之前有提过其实可以不使用它默认的'fx'队列,这节就教大家怎么自定义一个属于自己的队列,很简单:

我想建立一个名为'custom'的队列,里面有一个能使黑色小方块改变背景颜色的方法,如下:

$("div").queue("custom", function(next) {
    $('div').css({'background':'red'});
    next();
});


所见即所得——前面一个'custom'代表新队列的队列名(要是我也取'fx'会怎么样?我也不知道,有兴趣的朋友尝试之后可以留言告诉我结果,我也有兴趣会知道),后面仍然是回调函数,把你想执行的功能堆砌进去。

  但就这段代码而已,待你真正添加进网页,并且尝试运行,会发现并非“所见即所得”,压根就不会有任何效果。因为我故意省略了一段最最关键的语句……修改后的如下:

$("div").queue("custom", function(next) {
    $('div').css({'background':'red'});
    next();
})
.dequeue("custom"); //this is the key


对,就是这句,.dequeue("custom")。一般对与dequeue()的定义是“删除队列中最顶部的函数,并且执行它”。我并不赞同用“删除”这个字眼,而是倾向于“取出”,其实这个函数的功能就好像是一个数据结构中队列的指针,待队列中前一个函数执行完后,取下一个队列最顶端的函数。

实战

OK,主要的几个知识点都介绍完了。或许你会问,我们真的会用到这么复杂的动画操作吗呢?我相信大多数人士不会的,动画在网页中只是小小的点缀,但是小心驶得万年船。在这里我就照搬Cameron Mckay博客上的关于队列应用的例子

假设你要这么一个效果:让一个物体向上浮动2000毫秒(2秒),并且在前1000毫秒物体完全不透明,而在后1000毫秒物体从完全不透明变成完全透明,为了解释的更清楚,给出了下面的这个时间轴表(假设物体开始在距容器顶部100px的位置,也就是top:100px;):

时间(毫秒) 距顶端高度 不透明度
0 100px 1.0
500 90px 1.0
1000 80px 1.0
1500 70px 0.5
2000 60px 0.0

从时间轴表中我们可以更清晰的看到我们想要的效果,在这2000毫秒的时间内,物体的高度一致在均匀变化,逐渐减小,而不透明度在前1000毫秒始终保持为1.0,而在后1000毫秒才逐渐减小直至完全为0。

如果我们暂且只考虑向上浮动和透明效果,我们可能会写出这样的语句:

$("#object").animate({opacity: 0, top: "-=40"}, {duration: 2000});


很遗憾,这样的语句只能让物体在整体2000毫秒中都处于逐渐向不透明转化的过程,也就是不能让它在前1000毫秒中保持100%不透明——于是我们用queue来解决这个问题:

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


我们先来看它的思路:把控制不透明度和控向上移动的动画分别存储在两个队列中,控制向上移动的队列按默认情况进行(在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)               .slideDown(1000)               .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并行:

运行结果如下

 
本例完整代码:


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

   $("#section3a-input").click(function(){
    $("#section3a").css({'width':'100px'});  
    queuetrue();
   });
   $("#section3b-input").click(function(){
    $("#section3a").css({'width':'100px'}); 
    queuefalse();
   });



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队列。

分享到:
评论

相关推荐

    jquery插件使用方法大全

    jQuery UI中包含大量预定义好的部件(widget),以及一组用于构建高级元素(例如可拖放的界面元素)的工具。 jQuery 1.2.6(2008年5月):这一版主要是将Brandon Aaron开发的流行的Dimensions插件的功能移植到了核心...

    jQuery权威指南-源代码

    其次详细讲解了jQuery的各种选择器、jQuery操作DOM的方法、jQuery中的事件与应用、jQuery中的动画和特效、Ajax在jQuery中的应用,以及各种常用的jQuery插件的使用方法和技巧,所有这些知识点都配有完整的示例(包括...

    jQuery技术内幕:深入解析jQuery架构设计与实现原理

    第二部分(第2章)详细介绍和分析了构造函数jQuery()的用法、构造过程、原型属性和方法、静态属性和方法。 第三部分(第3~7章)详细分析了底层支持模块的源码实现,包括选择器Sizzle、异步队列Deferred Object、...

    jQuery教程学习

    第三节:jQuery速成 - 核心方法的使用 第四节:jQuery速成 - 基本对象获取 第五节:jQuery速成 - 层级对象获取 第六节:jQuery速成 - 简单对象获取 第七节:jQuery速成 - 内容对象的获取和对象可见性! 第八节:...

    jQuery基础教程(第四版)

    本书前6章以通俗易懂的方式讲解了jQuery的核心组件,包括jQuery的选择符、事件、动画、DOM操作、Ajax支持等。第7章和第8章介绍了jQuery UI、jQuery Mobile及利用jQuery强大的扩展能力开发自定义插件。随后的几章更加...

    jquery-1.1.3 效率提高800%

    要查看高级抽象,见$.set、$.post等,这些方法更易于理解和使用。但是功能上有限制(例如,没有错误处理函数)。 警告:如果数据类型指定为"script",那么POST自动转化为GET方法。(因为script会作为一个嵌入页面的...

    jQuery基础教程(第四版)

    不仅包括创建自己的实用函数,还有添加jQuery对象方法,以及使用jQuery UI部件工厂。接下来的几章更加深入地探讨了jQuery的各种特性,在这几章里将学习到很多高级的技术。 第9章重温关于选择符和遍历的知识,讲解了...

    jquery-course:我的Udemy课程“完整的jQuery课程:从入门到高级”中的代码

    第2节:动画第2节教您如何在jQuery中使用预定义和自定义动画,包括淡入淡出,滑动和移动元素。第3节:jQuery选择器第三部分是关于在页面上选择正确的元素。 这包括使用CSS选择器,用于遍历DOM的jQuery函数以及基于...

    一篇文章帮你搞定JQuery

    一篇文章帮你搞定JQuery1. 动画1.1 三种方式显示和隐藏事实1.1.1 默认显示和隐藏方式1.1.2 滑动显示和隐藏方式1.1.3 淡入淡出显示和隐藏方式2....,这篇主要描述JQuery的高级用法及案例 先贴思维导图:

    jquery基础教程高清版PDF.part5.rar

     10.4.2 添加jQuery对象方法   10.4.3 DOM遍历方法   10.4.4 添加新的简写方法   10.4.5 维护多事件日志   10.4.6 添加选择符表达式   10.4.7 创建缓动样式   10.4.8 做个好公民   10.5 小结...

    原生Javascript动画引擎KUTE.js.zip

    KUTE.js 为 Web 开发人员、设计师和动画师提供最基本的功能,提供易于使用的方法来设置高性能、跨浏览器的动画。 Demo 请查看此处。基础用法//vanilla js KUTE.fromTo('selector', fromValues, toValues, ...

    page-scroll-to-id:使用jquery将动画页面滚动到文档中的特定ID

    页面滚动到ID 页面滚动到ID是一个易于使用的jQuery插件,可将动画页面滚动到文档中的特定ID。 当与含有HREF价值环节的插件替换的“跳跃”的页面部分中的默认浏览器行为#被点击,通过顺畅动画的页面,这些部分()。 ...

    jQuery设计思想完整篇

    jQuery是目前使用最广泛的javascript函数库。 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库。微软公司甚至把jQuery作为他们的官方库。 对于网页开发者来说,学会jQuery是必要的。因为它让你...

    jquery-vertical-timeline:一个简单的jQuery垂直时间轴

    jQuery垂直时间轴支持所有现代浏览器和手持设备这是一个简单的垂直时间轴,使用CSS进行动画处理。浏览器支持IE10 + Firefox 4+ Chrome 4+ Safari 3.1+ Opera 10.5+ 手持Safari 3.2+ Android浏览器2.1+ Opera 10+ ...

    jQuery右侧悬浮蓝色在线客服代码

    使用方法: 1、将css样式复制到你的网页中 2、将代码部分拷贝到body结束前即可 @更多@ http://cleopard.download.csdn.net/ 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#...

    frontendmasters-svganimation:前端大师-SVG高级动画课程

    #Frontend Masters:高级SVG动画作者:Sarah Drasner 本讲座系列的所有相关幻灯片都在这里: 幻灯片讲座中使用的所有笔都在此。 此回购中包括一些非常基本的GSAP入门工具包。 ##第一部分,第三部分如果您需要入门...

    pocketHorse:jQuery幻灯片插件,支持左右方向以及'slide'&'push'过渡功能,仍需改进和完善

    jquery动画轮播插件,内置六种转场方式,包括三种高级模式 ###homepage . ####使用方法: $('selector').pocketHorse(option[,imageSrc]); ####动画参数option dotControl : true | false 是否启用点阵控制 ...

    react-show::atom_symbol:React的3kb CSS动画组件

    您不希望使用基于物理的自定义动画框架,请求动画框架,快乐的动画循环甚至jQuery来膨胀您的应用程序...天堂禁止。 特征 压缩后的3.7 kb 由本机CSS动画提供支持,并在可能的情况下在GPU上进行过渡 动画height: ...

    GSAP:GreenSock的GSAP JavaScript动画库(包括Draggable)

    生成可在所有主要浏览器中使用的高性能动画。 动画CSS,SVG,画布,React,Vue,WebGL,颜色,字符串,运动路径,通用对象... JavaScript可以接触的任何东西! GSAP的插件可让您以最少的代码创建令人的基于滚动的...

    react-slide-toggle:React组件对jQuery.slideToggle功能的重新实现

    关于React版本的jQuery.slideToggle... 由于使用display:none(惰性功能),因此应跳过折叠的项目JS动画可用于最佳动画控制,并可以添加插值或使用高级缓动配置,而CSS不能单独使用。 这将触发浏览器在每个requestAni

Global site tag (gtag.js) - Google Analytics