淘先锋技术网

首页 1 2 3 4 5 6 7

jQuery animate 是 jQuery 中常用的动画效果方法,它可以让元素在一定时间内实现平滑过渡。

jQuery animate 的底层实现原理是通过定时器 setInterval 不断的修改元素的 CSS 属性,从而实现动画效果。

接下来我们来看一下 jQuery animate 的源码实现:

jQuery.fn.animate = function( prop, speed, easing, callback ) {
var empty = jQuery.isEmptyObject( prop ),
optall = jQuery.speed( speed, easing, callback ),
// 默认动画选项
doAnimation = function() {
// 空对象不执行动画
if ( empty ) {
optall.complete.call( this );
return;
}
var animationData = jQuery.Animation( this, jQuery.extend( {}, prop ), optall ),
endEvent = "animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd",
$this = $( this );
animationData.done = optall.complete;
if ( optall.queue === false ) {
$this.off( endEvent );
animationData.run( 1 );
} else {
$this.queue( optall.queue, function( next ) {
$this.off( endEvent );
animationData.run( 1 );
next();
});
}
};
return empty || optall.queue === false ? doAnimation.call( this ) : this.queue( optall.queue, doAnimation );
};

在这段代码中,我们可以看到首先通过 jQuery.isEmptyObject 判断属性对象 prop 是否为空;如果不为空则通过 jQuery.Animation 方法创建动画对象 animationData ,并将动画完成后的回调函数 optall.complete 赋值给 animationData.done。

接下来通过判断 optall.queue 是否为 false 来决定动画执行方式:如果为 false,则直接执行动画,否则将动画函数 doAnimation 加入到事件队列中。

最后通过一个 endEvent 事件来监听动画结束的时机,并在动画结束后执行回调函数。