jQuery中的动画
1.show()方法和hide()方法
show()方法和hide()方法是jQuery中最基本的动画方法。在HTML文档里,为一个元素调用hide()方法,会将该元素的display样式改为“none”。
$("element").hide();
与css()方法设置display属性效果相同。
$("element").css("display","none");
注意hide()方法在将“内容”的display属性值设置为“none”之前,会记住原先的display属性值(“block”或“inline”或其他除了“none”之外的值)。当调用show()方法时,就会根据hide()方法记住的display属性值来显示元素。比如,一元素的display属性的值是“block”,当单击“标题”链接执行hide()方法的时候,hide()方法会做两步动作,首先会记住“内容”的display属性的值“block”,然后把display属性的值设置为“none”。
show()方法和hide()方法在不带任何参数的情况下,相当于css("display","none/block/inline"),作用是立即隐藏或显示匹配的元素,不会有任何动画。可以指定速度关键字,让元素具有动画效果,如:
$("element").hide("slow");
其他关键字还有“normal”和“fast”。slow的时间是600毫秒,normal是400毫秒,fast是200毫秒。
也可以使用数字定值,如使元素在1秒(1000毫秒)内显示出来。
$("element").show(1000);
从代码执行中,可以发现,show()和hide()会同时对元素的高度、宽度和不透明度同时做操作,直至元素完全显示或消失。
2.fadeIn()方法和fadeOut()方法
与show()和hide()不同的是,fadeIn()和fadeOut()只改变元素的不透明度。fadeOut()方法会在指定的一段时间内降低元素的不透明度,直到元素完全消失(“display:none”).fadeIn()则相反。
3.slideUp()方法和slideDown()方法
slideUp()方法和slideDown()方法只会改变元素的高度。如果一个元素的display属性值为“none”,当调用slideDown()方法时,这个元素将由上至下延伸显示。slideUp()方法正好相反,元素将由下到上缩短隐藏。
4.自定义动画方法animate()
通常情况下,当方法无法满足用户的各种需求,那就需要对动画有更多的控制,需要采取一些高级的自定义动画来解决这些问题。在jQuery中,可以使用animate()方法来自定义动画。其语法结构是:
animate(params,speed,callback);
参数说明如下:
param:一个包含样式属性及值的映射,比如{property1:"value1",property2:"value2",...}.
speed:速度参数,可选。
callback:在动画完成时执行的函数,可选。
自定义简单动画
有一个空白的HTML文档,里面有一个id=“panel”的<div>元素,当<div>元素被单击后,能在页面上横向飘动。
<div id="panel"></div>
给这个<div>元素添加css样式。
#panel{ position:relative; width:100px; height:100px; border:1px solid #0050D0; background:#96E555; cursor:pointer; }
为了使这个元素动起来,我们给这个元素添加“left”样式属性。(需要改变元素的“top”、“left”、“bottom”、“right”样式属性,需要把元素的position设置为“relative”或者“absolute”)。
$(function(){ $("#panel").click(function(){ $(this).animate({left:"300px"},3000); }) })
点击id为“panel”的元素,会在3秒内向右移动300像素。
累加、累减动画
之前代码的基础上,在{left:"300px"}之前加上“+=”或者“-=”符号即表示在当前位置累加或者累减。
$(function(){ $("#panel").click(function(){ $(this).animate({left:"+=300px"},3000); //在当前位置累加300px }) })
当元素被点击移动后,再次点击还会在现在的基础上继续向右移动。称为动画的累加。
多重动画
(1)同时执行多个动画
如果需要同时执行多个动画,例如在元素向右滑动的同时,放大元素的高度。根据animate()方法的语法结构,可以写出一下的代码:
$(function(){ $("#panel").click(function(){ $(this).animate({left:"300px",height:"200px"},3000); }) })
(2)顺序执行多个动画
animate()方法如果对同一个jQuery对象进行操作,可以改为链式的写法。
$(function(){ $("#panel").click(function(){ $(this).animate({left:"300px"},3000) .animate({height:"200px"},3000); }) })
回调函数
如果最后想改变元素的CSS样式。
css("border","5px solid blue");
如果在链式操作后直接加上上述代码。预期的效果是在动画的最后一步改变元素的样式,而实际的效果是,刚开始执行动画的时候,css()方法就被执行了。出现这个问题的原因是css()方法并不会加入到动画队列中么事立即执行。可以通过回调函数(callback)对非动画方法实现排队。只要把css()方法写在最后一个动画的回调函数里即可。
$(function(){ $("#panel").click(function(){ $(this).animate({left:"300px"},3000) .animate({height:"200px"},3000,function(){ $(this).css("border","5px solid blue"); }); }) })
停止元素的动画
很多时候需要停止匹配元素正在进行的动画,例如上例的动画,如果需要在某处停止动画, 需要使用stop()方法。stop()方法的语法结构为:
stop([clearQueue],[gotoEnd]);
参数clearQueue和gotoEnd都是可选的参数,为boolean值。clearQueue代表的是否要清空未执行完的动画队列,gotoEnd代表是否直接将正在执行的动画跳转到末状态。
判断元素是否处于动画状态
再使用animate()方法的时候,要避免动画基类而导致的动画与用户的行为不一致。当用户快速在某个元素上执行animate()动画时,就会出现动画累计。解决办法是判断元素是否正处于动画状态,如果元素不处于动画状态,才为元素添加新的动画,否则不添加。
if(!$(element).is(":animated")){ //如果当前没有进行动画,则添加新动画。 }
这个判断方法在animate()动画中经常被用到。
延迟动画
在动画执行的过程中,如果想对动画进行延迟操作,那么可以使用delay()方法。
$(function(){ $("#panel").click(function(){ $(this).animate({left:"300px"},3000) .delay(1000) .animate({height:"200px"},3000) .delay(2000) .fadeOut("slow"); }) })
delay()方法允许我们将队列中的函数延时执行。它既可以推迟动画队列中函数的执行,也可以用于自定义队列。
其他动画方法
jQuery还有4个专门用于交互的动画方法。
♦ toogle(speed,[callback]).
♦ slideToggle(speed,[easing],[callback]).
♦ fadeTo(speed,opacity,[callback]).
♦ fadeToggle(speed,[easing],[callback]).
toogle()
可以切换元素的可见状态。如果元素是可见的,则切换为隐藏的;如果元素是隐藏的,则切换为可见的。
$("#panel").click(function(){ $(this).next().toggle(); })
slideToggle()
通过高度变化来切换匹配元素的可见性。只调整元素的高度。
$("#panel").click(function(){ $(this).next().slideToggle(); })
fadeTo()
可以把元素的不透明度以渐进方式调整到指定的值。值调整元素的不透明度,即匹配的元素的高度和宽度不会发生变化。
$("#panel").click(function(){ $(this).next().fadeTo(600,0.2); })
当点击标签后,会在0.6秒内调整到指定的不透明度(20%)
fadeToggle()
通过不透明度变化来切换匹配元素的可见性。这个动画效果只调整元素的不透明度。
$("#panel").click(function(){ $(this).next().fadeToggle(); })