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的源码 ...
随机推荐
- 分享一个解析XML成为php数组的方法
原文:分享一个解析XML成为php数组的方法 <?php /* * To change this template, choose Tools | Templates * and open th ...
- vi使用高级
下面的命令在vi命令模式被激活 h 光标左移一个字符 l 光标向右移动一个字符 j 光标下移一行 k 移动光标线 一.对整行操作 1.复制光标所在行 yy 2.删除光标所在行 dd 3.选中光标所在行 ...
- jQuery的ready方法实现原理分析
jQuery中的ready方法实现了当页面加载完成后才执行的效果,但他并不是window.onload或者doucment.onload的封装,而是使用 标准W3C浏览器DOM隐藏api和IE浏览器缺 ...
- Java程序单元测试工具对比——Parasoft Jtest与Junit
Web应用程序开发中,面向对象的Java语言占了不少的比重.对于Java应用程序的测试方法或方式多种多样,比较典型的是程序员自己来完成程序测试中的一个部分——单元测试. 之前,慧都资讯提到单元测试是程 ...
- C# 对Outlook联系人的增、删、查
原文:C# 对Outlook联系人的增.删.查 [转] 注:定义变量 Outlook.Application myOlApp = new Outlook.ApplicationClass(); Out ...
- ECharts图表系统 特性总览
最近在玩ECharts,感觉真心不错,在这里把官方的资料收集收集,给大家推荐一下下~ Architecture ECharts (Enterprise Charts 商业产品图表库) 提供商业产品常用 ...
- JTAG应该如何接线
下面是某个ARM9评估板的原理图: 注意: 1. Vref和Vtarget可以直接连在一起,由被调试板提供3.3V或5V电源: 2. nTRST,最好上拉: 3. TDI,最好上拉 4. TMS,最好 ...
- 苹果公司的新的编程语言 Swift 高级语言(十五)--协议
协议定义了适合某个特定任务或功能须要的方法.属性和其他需求的一个蓝图.协议本身不提供这些需求的实现,它仅仅是描写叙述了一个任务或功能实现的蓝图. 协议与java 语言中的接口定义类似,都是描写叙述了一 ...
- WCF、Web API、WCF REST、Web Service
WCF.Web API.WCF REST.Web Service 区别 Web Service It is based on SOAP and return data in XML form. It ...
- 在线试听功能(前端直接略过吧,适合javaEE后台开发的)
应用场景:录音试听,MP3试听... 比如为客户提供录音功能时.客户希望录音完成试听录音,然后下载等功能.直接上代码:关键是取得录音的在服务器的地址,如:url='http://localhost:8 ...