一.前言

继上一篇文章jquery stop的探索之后,我们继续对jquery动画animate的研究。

从stop给出参数我们就知道,它适合你去立即停止或者立即结束当前动画,清除或者继续非当前的动画队列。

注意,stop控制的只是该dom对象的动画,无法去控制不同dom的动画执行顺序产生的积累,动画回调也无法避免这种积累,只能设置全局的动画状态参数来控制

由此可见,stop函数是不需要一个动画队列完完整整地完成的。

然而,很多时候,我们需要一个动画队列执行完成,即便有其它的非常规操作,也只是让这些非常规的操作显得无效。

比如图片轮播,当你快速点击前进或者后退按钮时,轮播的图片不应当在其动画效果还未展示完毕时,就切换到其它位置。它需要展示完成一个图片轮播后,再去响应某个有效的点击,而不是响应每个点击。

而有效的点击则是指:在一个动画完成后(完成一个动画队列的总的duration)的最近一次的点击。

因此,从这个需求来看,jquery的stop函数并非是我们需要的(它适合常见的下拉菜单显示隐藏效果)。

在研究之前,我先声明下,我是基于jquery1.8版本以上的。

----------------------------------------------------------------------------------

二.动画执行顺序

动画都是有执行顺序的,比如,两个动画一起执行,或者一个动画执行完后,再执行另一个动画。

好,我们来看一下示例:

1.同步执行(并行)

注意,同步执行动画是针对不同的动画对象而言,同一动画对象(DOM)其实是串行的。非常合乎逻辑的。

2.按次序执行(串行)

注意示例1中的js代码,无论你用链式写法($('.box1').animate({left:'+=100px'}).silbings('.box2').animate({left:'+=100px'})),还是我那么分开写两个动画,它们是一起执行的,也就是并行执行。

而为了有先后顺序,你需要把次动画放在前一个动画的回调函数中。

当然,当动画队列太多的时候,你需要queue函数和dequeue函数来优化动画队列代码。详见:http://mrthink.net/jqueryapi-queue-dequeue/

但是,使用该技巧时应当注意,如果需要某个事件来重复执行该动画队列,这种方法就失效了,它只能执行一次。示例:

三.动画完成问题

前面给出的示例看似没有什么问题,都按照我们的预期正确执行了。但是,当你频繁点击go按钮时,问题就出现了。

对于示例1来说,如果我们要等待动画队列执行完毕后再执行,那么这个问题比较容易解决。

我加入了一个全局的动画标识animateFlag,用于判断动画是否执行完毕。但是,这段代码实在是丑陋无比。为了让动画完整地执行,我们却把代码拆分地有些支离破碎,一点都不优雅。

对于示例1,因为动画是并行执行,所以,只需要在其中一个动画的完成回调函数中进行动画完成动画标识animateFlag的设置即可。这时,你再快速点击go按钮(在一个duration时间范围内),动画没有积累了,只执行一次,等到执行完后,才响应完成后的第一个点击事件。

那么对于示例2的串行执行动画,我们要让其完整执行后再响应go按钮的点击事件,该怎么做呢?

来看一个示例:

以上技巧解决串行动画完成问题可以说是屡试不爽啊!

但是,我遇到了一个比较奇葩的问题,以上的技巧有些失效了。animate使用opacity属性来显示和隐藏动画时,就会产生bug。

这个问题,我也不知道如何解决。

jquery animate 详解的更多相关文章

  1. jQuery:详解jQuery中的事件(二)

    上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...

  2. jQuery.validator 详解二

    前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲 ...

  3. jQuery.validator 详解

    jQuery.validator 详解二 前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示 ...

  4. jquery方法详解

    jquery方法详解 http://www.365mini.com/doc

  5. Jquery 选择器 详解 js 判断字符串是否包含另外一个字符串

    Jquery 选择器 详解   在线文档地址:http://tool.oschina.net/apidocs/apidoc?api=jquery 各种在线工具地址:http://www.ostools ...

  6. JQuery动画详解(四)

    一:基本动画show()显示隐藏的匹配元素.这个就是 'show( speed, [callback] )' 无动画的版本.如果选择的元素是可见的,这个方法将不会改变任何东西.无论这个元素是通过hid ...

  7. JQuery数组详解(含实例)

    <!doctype html>jQuery数组处理详解(含实例演示)@Mr.Think 演示所用数组 var _mozi=['墨家','墨子','墨翟','兼爱非攻','尚同尚贤']; 1 ...

  8. [转载]JavaEE学习篇之——JQuery技术详解

    原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/32102187 1.简介2.工具3.jQuery对象 1.DOM对象转化成j ...

  9. jquery扩展函数详解(我的人生颠覆)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上次分析了jquery的源码 ...

随机推荐

  1. Linux内核源代码情景分析-中断半

    一.中断初始化 1.中断向量表IDT初始化 void __init init_IRQ(void) { int i; #ifndef CONFIG_X86_VISWS_APIC init_ISA_irq ...

  2. code forces 148D Bag of mice (概率DP)

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  3. angularJS之使用过滤器转化输出 (angularJS系列最后一篇)

    在视图模板中使用过滤器 过滤器也是一种服务,负责对输入的内容进行处理转换,以便更好地向用户显示. 过滤器可以在模板中的{{}}标记中使用: {{ expression | filter:arg1:ar ...

  4. Swift 简简单单实现手机九宫格手势密码解锁

    原文:Swift 简简单单实现手机九宫格手势密码解锁 大家可以看到我之前的文章[HTML5 Canvas简简单单实现手机九宫格手势密码解锁] 本文是使用苹果语言对其进行了移植 颜色配色是拾取的支付宝的 ...

  5. ASP.NET Web Service中使用Session 及 Session丢失解决方法 续

    原文:ASP.NET Web Service中使用Session 及 Session丢失解决方法 续 1.关于Session丢失问题的说明汇总,参考这里 2.在Web Servcie中使用Sessio ...

  6. EasyUI的后台界面

    EasyUI的后台界面搭建及极致重构 〇.前言 要了解一个东西长什么样,至少得让我们能看到,才能提出针对性的见解.所以,为了言之有物,而不是凭空漫谈,我们先从UI说起,后台管理页面的UI我们将使用应用 ...

  7. DOM2级事件对象、添加事件、阻止默认事件、阻止冒泡事件、获取事件对象目标的兼容处理

    事件对象——兼容处理 /* * 功能: 事件对象兼容 * 参数: 表示常规浏览器的事件对象e */ function getEvent(e) { // 如果存在e存在,直接返回,否则返回window. ...

  8. Shell的学习就从重装系统开始吧

    小标题:与Fedora的爱恨情仇 干巴巴的shell学习实在枯燥,看来学习姿势还是要从实践入手 起因:传说中的不作死就不会死,昨晚偶遇一本PDF,讲glade编辑界面的,以下就被吸引了,跟着讲解搞出个 ...

  9. JQuery -&gt; 超级简单的下拉菜单

    使用jquery实现一个超级简单的下拉菜单. 效果图 最初的效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRmVlTGFuZw==/font/5a6L ...

  10. SQL Server 复制 - 发布订阅(SQL Server 数据同步)

    原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...