当前位置主页 > 资料库 > 前端教程 > jQuery Animate动画函数简介

jQuery Animate动画函数简介

10-19

jQuery中为我们提供了一个animate函数,我们可以使用它来完成一些复杂的动画效果。通常网页动画效果都是通过改变CSS属性值来实现的,而通过jQuery animate()函数,这些操作都将变得十分简单。

jQuery animate()函数

jQuery animate()的定义如下:

animate(params,[speed],[easing],[fn])                              
                            

这个函数的关键在于指定动画形式及结果样式属性对象。这个对象中每个属性都表示一个可以变化的样式属性(如“height”、“top”或“opacity”)。注意:所有指定的属性必须用骆驼形式,比如用marginLeft代替margin-left

每个属性的值表示这个样式属性到多少时动画结束。如果是一个数值,样式属性就会从当前的值渐变到指定的值。如果使用的是“hide”、“show”或“toggle”这样的字符串值,则会为该属性调用默认的动画形式。

animate()函数的参数含义如下:

  • params:一组包含作为动画属性和终值的样式属性和及其值的集合。
  • speed:三种预定速度之一的字符串("slow","normal", or "fast")或表示动画时长的毫秒数值(如:1000)。
  • easing:要使用的擦除效果的名称(需要插件支持).默认jQuery提供"linear" 和 "swing"。
  • fn:在动画完成时执行的函数,每个元素执行一次。

例如一个animate动画可以像下面这样书写:

$( "#panel" ).animate({

  // CSS属性和值

}, 5000, "linear", function() {

  // 动画结束后的处理函数

});                              
                            

上面的代码中,第一个参数是一组CSS属性和值,第二个参数是动画的持续时间,第3个参数是动画的easing类型,第4个参数是动画结束后的回调函数。

上面的介绍都是一些理论上的知识,下面我们将要列举3个关于jQuery animate()函数的例子。

图片碎片还原动画

兔子

我们的第一个例子是将一张图片切割为8个大小相等的碎块,然后通过jQuery animate()函数来以动画的形式合并为一张完整的图片。合并后的图片就是上面的这张图片。先来看看效果。

这个DEMO的基本HTML结构如下:

由于用一张完整的图片切割为8张小图片,所以在排列时,上面4张图片,下面4张图片,分别用img_itemimg_item2来表示上下两排图片。

接着添加一些CSS样式:

.img_item{
    position: absolute;
    left: 0;
    top:0;
    opacity:0;
}
.img_item2{
    position: absolute;
    left: 0px;
    opacity:0;
    top:225px;
}                             
                            

在完成上面的代码之后,我们就可以开始使用jQuery animate()函数来制作动画效果了。

$(document).ready(function(){
  var left = 0;
  $(".img_item").each(function(i,val){
      $(this).animate({
          left: left,
          opacity: 1
      }, 1500 );
      left += 200;
  });
  left = 0;
  $(".img_item2").each(function(i,val){
      $(this).animate({
          left: left,
          opacity: 1
      }, 1500 );
      left += 200;
  });
});   
                            
                            

上面的代码中,分别对img_itemimg_item2进行遍历,然后使用animate()函数分别对每一个元素的leftopacity属性进行操作,这样,图片切片会同时向左移动,透明度有0变为1。

制作序列动画效果

在上面的例子中,所有的图片切片都是同时开始动画的。下面的例子将使这些图片切片按不同的时间延迟先后开始动画。先来看看效果:

这个DEMO的基本HTML结构如下:

唯一与前一个例子不同的地方是这里所有的图片都使用相同的class。这个例子使用的css样式和一个例子相同。下面来看看jQuery代码的实现。

$(document).ready(function(){
   var left = 0;
   var items = $(".img_item");
   animateImg(items,0,0,0);
});                              
                            

当页面加载完毕之后,首先获取所有的.img_item元素,然后将这些元素作为参数传入animateImg()函数中来处理动画。下面是animateImg()函数的代码:

var indexNum = 1;
var animateImg = function(items,left,height,indexNum){
 if(items.length >= indexNum){
  var item = items.get(indexNum);
  $(item).animate({
    left: left,
    top : height,
    opacity: 1
   }, 1500 ,function() {
    left += 150;
    indexNum++;
    if(indexNum  % 4 == 0){
     left = 0;
     height += 150;
    }
    animateImg(items,left,height,indexNum);
   });
  }
};                              
                            

animateImg()函数使用了4个参数,第一个参数是所以图片的jquery集合,第2个和第3个参数定义容器的leftheight属性,开始的时候,这两个值都是0,它们位于容器的左上角位置。第4个参数用于图片的分行排列。

在函数中首先使用一个判断表达式来判断是否到达最大的item项,然后获取给定index的item项,接着为它执行animate动画,延迟时间为1500毫秒。执行完动画后,index加1,left属性加150,如果当前的index模4等于0,就进行换行处理。这样不断循环,就制作出来第二个DEMO中的动画效果。

串联动画效果

在前面的两个例子中,我们都是对单个元素进行动画。为了制作更复杂的动画效果,我们需要在单个元素上串联多种动画。这个效果我们只需要在上面的例子的基础上进行一些修改就可以了。

实现代码如下:

var animateImg = function(items,left,height,indexNum){
 if(items.length >= indexNum){
   var item = items.get(indexNum);
   $(item).animate({
       left: left,
       top : height,
       opacity: 1
   }, 1500 ,function() {
       left += 200;
       indexNum++;
       if(indexNum  % 4 == 0){
           left = 0;
           height += 225;
       }
    animateImg(items,left,height,indexNum);
    }).animate({ left:left+50}, 1500);
  }
};                              
                            

在这个DEMO中,我们以链式编程的方式多链了一个animate动画,这样就可以在第一个动画结束的时候开始第二个动画。只要你愿意,可以像这样添加多个动画效果。

Previous:
上一篇:CSS display:table属性介绍
Next:
下一篇:如何制作一个简单的3D图片画廊
返回顶部