jquery animate 详解
一.前言
继上一篇文章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 详解的更多相关文章
- jQuery:详解jQuery中的事件(二)
上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...
- jQuery.validator 详解二
前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲 ...
- jQuery.validator 详解
jQuery.validator 详解二 前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示 ...
- jquery方法详解
jquery方法详解 http://www.365mini.com/doc
- Jquery 选择器 详解 js 判断字符串是否包含另外一个字符串
Jquery 选择器 详解 在线文档地址:http://tool.oschina.net/apidocs/apidoc?api=jquery 各种在线工具地址:http://www.ostools ...
- JQuery动画详解(四)
一:基本动画show()显示隐藏的匹配元素.这个就是 'show( speed, [callback] )' 无动画的版本.如果选择的元素是可见的,这个方法将不会改变任何东西.无论这个元素是通过hid ...
- JQuery数组详解(含实例)
<!doctype html>jQuery数组处理详解(含实例演示)@Mr.Think 演示所用数组 var _mozi=['墨家','墨子','墨翟','兼爱非攻','尚同尚贤']; 1 ...
- [转载]JavaEE学习篇之——JQuery技术详解
原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/32102187 1.简介2.工具3.jQuery对象 1.DOM对象转化成j ...
- jquery扩展函数详解(我的人生颠覆)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上次分析了jquery的源码 ...
随机推荐
- 【Android UI设计和开发】动画(Animation)详细说明(一)
Android开发之动画效果浅析 请尊重他人的劳动成果.转载请注明出处:Android开发之动画效果浅析 程序执行效果图: Android动画主要包括补间动画(Tween)View Animation ...
- 欧拉计划·Q8
题目8:找出这个1000位数字中连续13个数字乘积的最大值. 找出下面这个1000位的整数中连续13个数字的最大乘积. 7316717653133062491922511967442657474235 ...
- sqlite学习笔记5:插入数据,查询数据和删除数据
曾闻:全部的编程都是已数据为中心,觉得很有道理. 所谓数据库数据库,没有数据叫什么数据库,接下来就看看怎样在表中插入数据. 一 插入数据 1 创建一张表 首先为了插入数据,须要先创建一张表: CREA ...
- 当有多于64合乎逻辑的cpu时刻,Windows 下一个Oracle db 实例启动(startup)什么时候会hang(待定)
Bug 9772171 - Database startup hangs on Windows when machine has more than 64 cores [ID 9772171.8] 该 ...
- 高性能双端js模板---simplite
simplite是一款js实现的模板引擎,它能够完成浏览器端js模版和node服务器端js模板的数据渲染,渲染性能达到引擎的极限. 渲染性能十分突出. 支持浏览器端和node服务器端模板渲染. 它简单 ...
- 浅谈 js eval作用域
原文:浅谈 js eval作用域 就简单聊下如何全局 eval 一个代码. var x = 1; (function () { eval('var x = 123;'); })(); console. ...
- [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)
原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...
- Jmeter性能测试
Jmeter性能测试 入门 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmeter搞定的 ...
- 增加 Java 有几个好习惯表现
以下是一些参考网络资源中的摘要Java编程在一些地方尽可能做. 1. 尝试使用单个例如在合适的场合 使用单例可以减轻负荷的负担,缩短加载时间.提高装载效率,但并不是所有的地方都适合一个案例.简单的说, ...
- Ping域名惊现65.49.2.178
--- 昨天新建的博,早晨起来进去看看,发现无法访问.这… 排错开始,ping域名出现如上图所示结果,请求超时…哪里的问题呢 有时常识是害人的,想起了前两月群里也有人说本地无法访问自己网站,别人能访问 ...