jQuery中的动画
1.show()方法和hide()方法
控制元素的显示状态— —出现和隐藏,同时改变内容的高度、宽度和不透明度,直至这三个属性值为100%或为0(display:none)。相当于css中的display:block/inline/none;
注意:用jQuery做动画效果要求在标准模式下,否则可能会引起动画抖动。标准模式即要求文件头部包含如下的DTD定义:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://wslideww.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
参数:fast— —200ms、normal— —400ms、slow— —600ms、指定数字(ms);参数不是数字加引号,参数是数字可不加。
(1)fadeIn()方法和fadeOut()方法
只改变元素的不透明度— —增加透明度和降低透明度,直至元素完全消失(display:none)
(2)slideUp()方法和slideDown()方法
只改变元素的高度— —由下至上收起和由上至下展开
2.animate()方法—自定义动画
left属性:该属性定义了定位元素左外边距边界与其包含块左边界之间的偏移。
注释:如果 "position" 属性的值为 "static",那么设置 "left" 属性不会产生任何效果。
格式:animate(params,speed,callback)
(1)第一个参数params:一个包含样式属性及值得映射,例子:{property:“value1”,property:“value1”。。。。}
(2)第二个参数speed:速度参数
(3)第三个参数callback:回调函数,动画完成时执行的动作
补充:①属性的值可以累加、累减,animate({left:"+=500px"})
②设置不同的属性可同时执行多个动画,也可拆开代码按顺序执行
③animate()方法都是对同一个jQuery对象进行操作,可以用链式的写法实现多重操作
3.动画回调函数
动画队列:动画效果的执行具有先后顺序
注释:只有动画的方法才能加入到动画队列中,非动画方法不会加入动画队列,而是立即执行,可通过将非动画方法写在回调函数中来对非动画方法实现排队。css()方法就不会加入到动画队列中。
解决办法:可以使用回调函数(callback)对非动画方法实现排队,只要把css()方法写在最后一个动画的回调函数里,callback回调函数适用于jQuery所有的动画效果方法
4.停止动画——stop()方法
结构:stop([clearQueue],[gotoEnd])
clearQueue,gotoEnd都是可选参数,为布尔值。clearQueue表示是否要清空未执行完的动画队列。gotoEnd表示是否直接将正在执行的动画跳转到末状态
如果直接使用stop()方法,会立即停止当前正在进行的动画,如果接下来还有动画等待继续进行,则以当前状态开始接下来的动画。
经常会遇到这种情况,在为一个元素绑定hover事件之后,用户把光标移入元素时会触发动画效果,当这个动画还没结束时,用户就将光标移出这个元素,那么光标移出的动画效果将会导致动画效果与光标的动作不一致。此时,只要在光标的移入、移出动画之前加入stop()方法即可解决这个问题。stop()方法会结束当前正在进行的动画,并立即执行队列中的下一个动画。
$("#panel").hover(function(){ $(this).stop() .animate({height:"150",width:"300"},200); },function(){ $(this).stop() .animate({height:"20",width:"60"},300); });
如果遇到组合动画,这时就需要将stop的第一个参数设为true
$("#panel").hover(function(){ $(this).stop(true) .animate({height:"150"},200) .animate({width:"300"},300); },function(){ $(this).stop(true) .animate({height:"20"},200) .animate({width:"60"},300); });
第二个参数可用于让正在执行的动画直接到达结束时刻的状态,通常用于后一个动画需要基于前一个动画的末状态的情况
stop(false,true):让当前动画直接到达末状态
stop(true,true):停止当前动画并直接到达当前动画的末状态,并清空动画队列
注意:jQuery只能设置正在执行的动画的最终状态
5.判断元素是否处于动画状态
问题:在使用animate()方法时,要避免动画积累而导致的动画与用户的行为不一致。当用户快速在某个元素上执行animate()动画时,就会出现动画积累。
解决:判断元素是否正处于动画状态,如果元素不处于动画状态,才为元素添加新的动画,否则不添加。
if(!$(element).is(":animate")){ //如果当前没有进行动画,则添加新动画 }
6.延迟动画——delay()方法
7.其他动画方法——用于交互的动画方法
(1)toggle()方法:切换元素的可见状态。如果元素是可见的切换为隐藏,如果元素是隐藏的切换为可见的。
toggle()方法的另一个用法是模拟鼠标连续单击事件。
格式:toggle(speed,[callback])
1$("#panel").click(function(){ 2 $(this).next().toggle(); 3}
相当于:
1 $("#panel").toggle(function(){ 3 $(this).next().show(); 4 },function(){ 5 $(this).next().hide(); 6 })
(2)slideToggle()方法:通过高度变化来切换匹配元素的可见性,使用方法同toggle
(3)fadeTo()方法:把元素的不透明度以渐进方式调整到指定的值,使用方法同toggle
(4)fadeToggle()方法:通过不透明度变化来切换匹配元素的可见性,使用方法同toggle