欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jQuery中的动画

程序员文章站 2024-03-25 12:16:52
...

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