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

 

posted @ 2017-07-26 17:48  苯宝宝  阅读(286)  评论(0编辑  收藏  举报