jquery自定义动画animate

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

!DOCTYPEhtmlhtmlxmlns==Content-Typecontent=text/html;charset=utf-8/title/titlescriptsrc=jquery-1.11.2.js/scriptstyletype=text/css#box{width:100px;height:100px;background-color:red;position:absolute;}#pox{width:100px;height:100px;background-color:green;position:absolute;top:200px;}/style/headbodyinputtype=buttonclass=buttonvalue=开始/inputtype=buttonclass=stopvalue=停止/inputtype=buttonclass=anivalue=查找运动中的动画/divid=boxbox/divdivid=poxpox/div/body/htmlscripttype=text/javascript$(function(){$(.button).click(function(){$(#box).animate({left:300px//要想使用lefttopbottomright这种方向性的属性先必须对#box元素设置CSS绝对定位})})//自定义动画中,每次开始运动都必须是初始位置或初始状态,而有时我们想通过当前位置或状态下再进行动画。jQuery提供了自定义动画的累加、累减功能。$(.button).click(function(){$(#box).animate({left:+=50px//每点击一次.button按钮,#box元素就往左移动50px})})//-------------------------------------同步动画//一个CSS变化就是一个动画效果,下面的例子中,已经有四个CSS变化(分别是width,height,opacity,fontSize的变化)实现了多重动画同步运动的效果。(所谓多重同步运动的效果就是,这四个css属性的值在同一时间,同时变化)$(.button).click(function(){$(#box).animate({width:300px,height:200px,opacity:0.5,//透明度为0.5注:透明度的值在0-1之间fontSize:200px,//字体大小设为30px})//第一个参数:是一个对象,他是键值对的css})//--------------------------------------列队动画//通过回调函数现实队列动画。(效果就是:首先#box的宽度变为300px然后高度变为200px,然后透明度变为50%,字体大小变为150px最后弹出一个“完毕”)$(.button).click(function(){$(#box).animate({width:300px},1000,function(){$(#box).animate({height:200px},1000,function(){$(#box).animate({opacity:0.5},1000,function(){$(#box).animate({fontSize:150px},1000,function(){alert(完毕)})});});});})//在同一个元素的基础上,使用链式调用也可以实现列队动画$(.button).click(function(){$(#box).animate({width:300px},1000).animate({height:200px},1000).animate({opacity:0.5},1000).animate({fontSize:150px},1000,function(){alert(列队动画执行完毕)})});//在同一个元素的基础上,通过依次顺序实现列队动画(如果有多个元素则不能实现,两个元素之间的动画是同步的。)$(.button).click(function(){$(#box).animate({width:300px},1000);$(#box).animate({height:200px},1000);$(#box).animate({opacity:0.5},1000);$(#box).animate({fontSize:150px},1000,function(){alert(列队动画执行完毕)});})//如果有多个元素则不能实现不信请看下面代码(通过执行下面这段代码,我们发现#box与#pox这两个元素的动画是同时执行的,属于#box的那两段动画是先执行$(#box).animate({width:300px},1000)然后再执行(#box).animate({opacity:0.5},1000);他们两个有列队动画的效果)而属于#pox的两段动画是先执行$(#pox).animate({height:200px},1000)然后再执行$(#pox).animate({fontSize:150px},1000)他们两个有列队动画的效果。但是$(#box).animate({width:300px},1000)与$(#pox).animate({height:200px},1000);同时执行的。$(#box).animate({opacity:0.5},1000)与$(#pox).animate({fontSize:150px},1000)是同时执行的。//前面说了这么一大堆其实就是://#box的第一条和第三条是列队动画//#pox的第二条和第四条是列队动画//#box的第一条和#pox的第二条是同步动画//#box的第三条和#pox的第四条是同步动画$(.button).click(function(){$(#box).animate({width:300px},1000);$(#pox).animate({height:200px},1000);$(#box).animate({opacity:0.5},1000);$(#pox).animate({fontSize:150px},1000,function(){alert(列队动画执行完毕)});})//那我们现在的需求是:不管你有几个元素,我都要他们依次实现列队动画效果。(测试了一下,只能用这种回调函数嵌套的方式来实现了)$(.button).click(function(){$(#box).animate({width:300px},1000,function(){$(#pox).animate({height:200px},1000,function(){$(#box).animate({height:200px},1000,function(){$(#pox).animate({fontSize:150px},1000,function(){alert(列队动画执行完毕)});})})})})//---------------------------------动画与非动画进行队列【queue()】//我们知道动画可以有列队效果。但是一个普通的css(比如改变背景颜色)如果实现与动画进行列队呢?$(.button).click(function(){$(#box).slideUp(1000).slideDown(1000).css(background,yellow)})//本来我们是想要实现队列动画的,也就是先让#box滑动隐藏,然后再让它滑动显示,最后让它改变颜色。可是我们运行这段呢代码,我们看到第一时间就执行了css(background,yellow)这段代码。//通过上面的代码我们了解到css()方法不是动画方法,会和第一个动画同时执行。也就是说非动画不能列队。//现在问题又来了。我现在想要实现列队动画,也想非动画和动画一起列队怎么办呢?其实我们可以使用回调函数实现的。请看下面的代码$(.button).click(function(){$(#box).slideUp(1000).slideDown(1000,function(){$(this).css(background,yellow)}).hide(3000);})//但如果上面这样的话,当列队动画繁多的时候,可读性不但下降,而原本的动画方法不够清晰。所以,我们的想法是每个操作都是自己独立的方法。那么jQuery提供了一个类似于回调函数的方法:.queue()$(.button).click(function(){//三个动画。$(#box).slideUp(1000).slideDown(1000).queue(function(){$(this).css(background,yellow);})})//现在,我们想继续在.queue()方法后面再增加一个隐藏动画,这时发现居然无法实现。这是.queue()特性导致的。有两种方法可以解决这个问题,jQuery的.queue()的回调函数可以传递一个参数,这个参数是next函数,在结尾处调用这个next()方法即可再链式执行列队动画。//链式编程实现队列动画$(.button).click(function(){//四个动画$(#box).slideUp(1000).slideDown(1000).queue(function(next){//这个next是一个函数$(this).css(background,yellow);next();}).hide(1000);});//顺序编程实现队列动画我们看到使用顺序调用的列队,逐个执行,非常清晰$(.button).click(function(){$(#box).slideUp(1000);$(#box).slideDown(1000);$(#box).queue(function(next){$(this).css(background,yellow);next();});$(#box).hide(1000);});//因为next函数是jQuery1.4版本以后才出现的,而之前我们普遍使用的是.dequeue()方法。意思为执行下一个元素列队中的函数。//使用.dequeue()方法执行下一个函数动画//$(.button).click(function(){//$('#box').slideUp('slow').slideDown('slow').queue(function(){//$(this).css('background','orange');//$(this).dequeue();//相当于上面的那句next()只是这里的function()括号里不像上面那样需要传递一个next函数//}).hide(1000)//});//-----------------------------动画的清除【clearQueue()】//jQuery还提供了一个清理列队的功能方法:.clearQueue()。把它放入一个列队的回调函数或.queue()方法里,就可以把剩下为执行的列队给移除。//清理动画列队//假如我想在执行完第二个动画那就就不再执行了。那么只要在第二个动画的回调函数哪里添加一句$(this).clearQueue()就可以停止后面的列队动画了$(.button).click(function(){$(#box).slideUp(1000).slideDown(1000,function(){$(this).clearQueue()}).queue(function(next){$(this).css(b

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功