.animate( properties [, duration ] [, easing ] [, complete ] )

描述
properties

所有用于动画的属性必须是数字的,除非另有说明;这些属性如果不是数字的将不能使用基本的jQuery功能。(例如,widthheight或者left可以执行动画,但是background-color不能,除非使用jQuery.Color插件。)属性值的单位像素(px),除非另有说明。单位em 和 %需要指定使用

除了样式属性, 一些非样式的属性,如scrollTop 和 scrollLeft,以及自定义属性,也可应用于动画。

CSS简写属性(例如font, background, border)没有得到充分的支持。例如, 如果你想边框宽度做动画呈现,至少边框样式和边框宽度必须预先设定不为”auto” 。或者,如果你想字体大小做动画, 你可以使用 ‘font-size’ ,而不是简单的’font’。

除了定义数值,每个属性能使用’show’, ‘hide’, 和 ‘toggle’。这些快捷方式允许定制隐藏和显示动画用来控制元素的显示或隐藏。为了使用jQuery内置的切换状态跟踪,‘toggle’关键字必须在动画开始前给定属性值。(注:jquery中有两个.toggle()方法,一个是显示或隐藏匹配元素。另一个是绑定两个或多个处理程序绑定到匹配的元素,用来执行在交替的点击。哪一个被调用取决于传递的参数的设置。所以这里‘toggle’关键字必须在动画开始前给定属性值,以确认调用哪个‘toggle’方法。)

动画属性也可以是一个相对值。如果提供一个以+= 或 -=开始的值,那么目标值就是以这个属性的当前值加上或者减去给定的数字来计算的。

注意: 不同于动画的简便方法,比如.slideDown() 和 .fadeIn(),.animate()方法不会影响隐藏元素的可见性部分的效果。例如,给定$(‘someElement’).hide().animate({height:’20px’}, 500),动画将执行,但该元素将保持隐藏。

一个CSS属性和值的对象,动画将根据这组对象移动。
duration

持续时间是以毫秒为单位的;值越大表示动画执行的越慢,不是越快,默认: 400。还可以提供‘fast’ 和 ‘slow’字符串,分别表示持续时间为200 和 600毫秒。

一个字符串或者数字决定动画将运行多久。(注:默认值: "normal", 三种预定速度的字符串("slow", "normal", 或 "fast")或表示动画时长的毫秒数值(如:1000) )
easing

一个字符串,表示过渡使用哪种缓动函数。(注:jQuery自身提供”linear” 和 “swing”,其他效果可以使用jQuery Easing Plugin插件)

一个字符串,表示过渡使用哪种缓动函数。(译者注:jQuery自身提供"linear" 和 "swing")
complete

如果提供回调函数,start, step, progress, complete, done, fail, always回调 将在每个元素上执行一次; this会指向正在执行动画的DOM元素。如果集合中没有任何元素,没有回调将被调用。 如果多个元素执行动画,回调将在每个匹配的元素上执行一次,不是作为整个动画执行一次。 这是设置为DOM元素进行动画。 如果没有任何元素,在集合,没有回调被调用。 如果多个元素的动画, 回调执行每一次匹配的元素, 没有一次为动画作为一个整体。 使用.promise()方法来获得一个promise,您可以附加回调到任意元素数量的动画集合上,包括零元素,(当resolve时)来触发一次。

如果提供complete回调函数将在动画完成后被执行一次。这对e于按顺序执行一系列不同动画时,特别有用。这个回调函数不设置任何参数,但是this会被传递到正在执行动画的DOM元素上,如果多个元素一起做动画效果,值得注意的是这个回调函数在每个匹配元素上执行一次,不是这个动画作为一个整体。

在动画完成时执行的函数。

实例:

htmlcssjs
    <button name="block">出现</button>
    <button name="none">消失</button>
    <button name="toggle">切换</button>
    *{
        margin: 0;
        padding:0;
    }
    div{
        width: 100px;
        height: 100px;
        background: pink;
        margin: 0 auto;
    }
    $('[name="block"]').click(()=>{
        $('div').animate( {width : 100} , 2000 , 'linear' , ()=> console.log('出现动画结束了') );
    })
    // 可以用+= -=在属性原有值得基础上进行增减数值
    $('[name="none"]').click(()=>{
        $('div').animate( {width : '-=100'} , 2000 , 'linear' , ()=> console.log('消失动画结束了'));
    })

    $('[name="toggle"]').click(()=>{
        // 如果 width 是 0    让 宽是 100
        // 如果 width 是 100  让 宽是 0
        if( $('div').css('width') === '100px' ){
            $('div').animate( {width : 0} , 2000 , 'linear' , ()=> console.log('消失动画结束了'));
        }else{
            $('div').animate( {width : 100} , 2000 , 'linear' , ()=> console.log('消失动画结束了'));
        }
    })

进阶使用

.animate( properties, options )

描述
properties

所有用于动画的属性必须是数字的,除非另有说明;这些属性如果不是数字的将不能使用基本的jQuery功能。(例如,widthheight或者left可以执行动画,但是background-color不能,除非使用jQuery.Color插件。)属性值的单位像素(px),除非另有说明。单位em 和 %需要指定使用

除了样式属性, 一些非样式的属性,如scrollTop 和 scrollLeft,以及自定义属性,也可应用于动画。

CSS简写属性(例如font, background, border)没有得到充分的支持。例如, 如果你想边框宽度做动画呈现,至少边框样式和边框宽度必须预先设定不为”auto” 。或者,如果你想字体大小做动画, 你可以使用 ‘font-size’ ,而不是简单的’font’。

除了定义数值,每个属性能使用’show’, ‘hide’, 和 ‘toggle’。这些快捷方式允许定制隐藏和显示动画用来控制元素的显示或隐藏。为了使用jQuery内置的切换状态跟踪,‘toggle’关键字必须在动画开始前给定属性值。(注:jquery中有两个.toggle()方法,一个是显示或隐藏匹配元素。另一个是绑定两个或多个处理程序绑定到匹配的元素,用来执行在交替的点击。哪一个被调用取决于传递的参数的设置。所以这里‘toggle’关键字必须在动画开始前给定属性值,以确认调用哪个‘toggle’方法。)

动画属性也可以是一个相对值。如果提供一个以+= 或 -=开始的值,那么目标值就是以这个属性的当前值加上或者减去给定的数字来计算的。

注意: 不同于动画的简便方法,比如.slideDown() 和 .fadeIn(),.animate()方法不会影响隐藏元素的可见性部分的效果。例如,给定$(‘someElement’).hide().animate({height:’20px’}, 500),动画将执行,但该元素将保持隐藏。

一个CSS属性和值的对象,动画将根据这组对象移动。
 

duration

持续时间是以毫秒为单位的;值越大表示动画执行的越慢,不是越快,默认: 400。还可以提供’fast’ 和 ‘slow’字符串,分别表示持续时间为200 和 600毫秒。

easing

一个字符串,表示过渡使用哪种缓动函数。(注:jQuery自身提供”linear” 和 “swing”,其他效果可以使用jQuery Easing Plugin插件)。

queue

一个布尔值,指示是否将动画放置在效果队列中。如果为false时,将立即开始动画。 从jQuery1.7开始,queue选项也可以接受一个字符串,在这种情况下,在动画被添加到由该字符串表示的队列中。当一个自定义的队列名称被使用,动画不会自动启动;你必须调用.dequeue("queuename")来启动它。

specialEasing

包含一个或多个由properties参数定义的CSS属性及其相应的简化函数,及其相应的缓动函数组成的键值对map。( 1.4 新增)

step

为每个动画元素的每个动画属性调用的函数。这个函数提供了一个修改Tween 对象(渐变对象)的机会,在属性被设置之前改变它的值。

progress

在动画的每一步之后调用的函数,无论动画属性有多少,每个动画元素只调用一次。

complete

在动画完成时执行的函数。

done

在动画完成时执行的函数。 (他的Promise对象状态已完成)

fail

动画失败完成时执行的函数。(他的Promise对象状态未完成)。

always

在动画完成或未完成情况下停止时执行的函数。(他的Promise对象状态已完成或未完成)。

一组包含动画选项的值的集合。

回调函数

提供了每个元素都会调用start、step、progress、complete、done、fail和always回调函数;这被设置为正在动画的DOM元素。如果集合中没有元素,则不会调用回调函数。如果有多个元素被激活,那么回调函数会对每个匹配的元素执行一次,而不是对整个动画执行一次。使用.promise()方法获得一个promise,你可以附加回调函数,对任意大小的动画集(包括0个元素)触发一次。

step()- 每步动画执行后调用的回调函数。

启用自定义动画类型或改变正在执行的动画,此功能是非常有用。它接受两个参数(now 和 fx),this是当前正在执行动画的DOM元素集合。

now: 每一步动画属性的数字值

fx: jQuery.fx 原型对象的一个引用,其中包含了多项属性,比如elem 表示前正在执行动画的元素,startend分别为动画属性的第一个和最后一个的值,prop为进行中的动画属性。

需要注意的是step函数被每个动画元素的每个动画属性调用。例如,给定两个列表项,step函数在动画的每一步触发四次:

htmlcssjs
    <div id="clickme">
    点我
    </div>
    <div id="round"></div>
    <div class="text"></div>
    #round{
        position: relative; 
        left: 10px ; 
        width : 100px ; 
        height : 100px; 
        border-radius: 50%; 
        background-color: red;
    }
    $('#clickme').click(function() {
        $('#round').animate({
            opacity: .5,
            height: '+=105px',
            height: 'toggle'
        },{step: function(now, fx) {
            var data = fx.elem.id + ' ' + fx.prop + ': ' + now;
            $('.text').append('<div>' + data + '</div>');
        }
        });
    })

若要同时将宽度和高度进行swing动画方式和不透明度进行linear动画方式

htmlcssjs
    <div id="clickme">
        点我
    </div>
    <div id="round"></div>
    <div class="clickme">
        点我
    </div>
    <div class="round"></div>
    <div class="text"></div>
    #round{
        position: relative; 
        left: 10px ; 
        width : 100px ; 
        height : 100px; 
        border-radius: 50%; 
        background-color: red;
    }
    .round{
        position: relative; 
        left: 10px ; 
        width : 100px ; 
        height : 100px; 
        border-radius: 50%; 
        background-color: red;
    }
    // 第一种
    $( "#clickme" ).click(function() {
        $( "#round" ).animate({
            width: [ "toggle", "swing" ],
            height: [ "toggle", "swing" ],
            opacity: "toggle"
        }, 5000, "linear", function() {
            $( this ).after( "<div>动画完成</div>" );
        });
    });
    // 第二种
    $( ".clickme" ).click(function() {
        $( ".round" ).animate({
            width: "toggle",
            height: "toggle",
            opacity: "toggle"
        }, {
            duration: 5000,
            specialEasing: {
                width: "swing",
                height: "swing",
                opacity: "linear"
            },
            complete: function() {
                $( this ).after( "<div>动画完成</div>" );
            }
        });
    });

queue方式

第一个动画是在执行时 width和后续动画一起执行,执行时间是width动画时间或后续动画总计时间取最大值

第二个动画是3个动画依次执行,执行时间是3个动画总计时间

htmlcssjs
    <button id="go1">» Animate Block1</button>
    <button id="go2">» Animate Block2</button>
    <button id="go3">» Animate Both</button>
    <button id="go4">» Reset</button>
    <div id="block1">Block1</div>
    <div id="block2">Block2</div>
        div {
            background-color: #bca;
            width: 200px;
            height: 1.1em;
            text-align: center;
            border: 2px solid green;
            margin: 3px;
            font-size: 14px;
        }
        button {
            font-size: 14px;
        }
    $( "#go1" ).click(function() {
    $( "#block1" )
        .animate({
        width: "90%"
        }, {
        queue: false,
        duration: 3000
        })
        .animate({ fontSize: "24px" }, 1500 )
        .animate({ borderRightWidth: "15px" }, 1500 );
    });
    
    $( "#go2" ).click(function() {
    $( "#block2" )
        .animate({ width: "90%" }, 1000 )
        .animate({ fontSize: "24px" }, 1000 )
        .animate({ borderLeftWidth: "15px" }, 1000 );
    });
    
    $( "#go3" ).click(function() {
    $( "#go1" ).add( "#go2" ).click();
    });
    
    $( "#go4" ).click(function() {
    $( "div" ).css({
        width: "",
        fontSize: "",
        borderWidth: ""
    });
    });

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。