jQuery的动画之animate
.animate()方法允许我们在任意的数值的CSS属性上创建动画
第一种设置语法:
.animate( properties ,[ duration ], [ easing ], [ complete ] )
参数分解:
properties:
一个或多个css属性的键值对所构成的Object对象。要特别注意所有用于动画的属性必须是数字的,除非另有说明;这些属性如果不是数字的将不能使用基本的jQuery功能。比如常见的,border、margin、padding、width、height、font、left、top、right、bottom、wordSpacing等等这些都是能产生动画效果的。background-color很明显不可以,因为参数是red或者GBG这样的值,非常用插件,否则正常情况下是不能只用动画效果的。
注意:
1、CSS 样式使用 DOM 名称(比如 "fontSize")来设置,而非 CSS 名称(比如 "font-size");
2、属性值的单位像素(px),除非另有说明;
3、单位em 和 %需要指定使用。
.animate({
left: 50,
width: '50px'
opacity: 'show',
fontSize: "10em",
}, 500);
除了定义数值,每个属性能使用'show', 'hide', 和 'toggle'。这些快捷方式允许定制隐藏和显示动画用来控制元素的显示或隐藏
.animate({
width: "toggle"
});
如果提供一个以+= 或 -=开始的值,那么目标值就是以这个属性的当前值加上或者减去给定的数字来计算的
.animate({
left: '+=50px'
}, "slow");
duration:
动画执行的时间,持续时间是以毫秒为单位的;值越大表示动画执行的越慢,不是越快。还可以提供'fast' 和 'slow'字符串,分别表示持续时间为200 和 600毫秒。
easing
动画运动的算法,jQuery库中默认调用 swing。
complete
回调,动画完成时执行的函数,这个可以保证当前动画确定完成后发会触发。
效果:
动画1:
$a.animate({
width :300,
height :300
});
动画1.gif
动画2:
$a.animate({
width : "+=100px",
height : "+=100px"
});
动画2.gif
动画3:
$a.animate({
fontSize: "5em"}, 2000, function() {
alert("动画 fontSize执行完毕!");
});
动画3.gif
动画4:
$a.animate({
width: "toggle"
});
动画4.gif
animate在执行动画中,如果需要观察动画的一些执行情况,或者在动画进行中的某一时刻进行一些其他处理,我们可以通过animate提供的第二种设置语法,传递一个对象参数,可以拿到动画执行状态一些通知。
第二种设置语法:
.animate( properties, options )
options参数:
duration - 设置动画执行的时间
easing - 规定要使用的 easing 函数,过渡使用哪种缓动函数
step:规定每个动画的每一步完成之后要执行的函数
progress:每一次动画调用的时候会执行这个回调,就是一个进度的概念
complete:动画完成回调
注意:如果多个元素执行动画,回调将在每个匹配的元素上执行一次,不是作为整个动画执行一次。
例子:
script代码:
$("#exec").click(function() {
var v = $("#animation").val();
var $aaron = $("#aaron");
if (v == "1") {
//观察每一次动画的改变
$aaron.animate({
height: '50'
}, {
duration :2000,
//每一个动画都会调用
step: function(now, fx) {
$aaron.text('高度的改变值:'+now)
}
})
} else if (v == "2") {
//观察每一次进度的变化
$aaron.animate({
height: '50'
}, {
duration :2000,
//每一步动画完成后调用的一个函数,
//无论动画属性有多少,每个动画元素都执行单独的函数
progress: function(now, fx) {
$aaron.text('进度:'+arguments[1])
// var data = fx.elem.id + ' ' + fx.prop + ': ' + now;
// alert(data)
}
})
}
});
效果:
动画1.gif 动画2.gif