Jquery源码分析---FX分析
2010-09-14 13:39:01 来源:WEB开发网// 动画的每一个步骤
step: function(gotoEnd){
var t = now();//运行到当前的时间,因为是13ms才运行一次。
// 强行指定结束或当前时间大于startTime+duration
if ( gotoEnd || t > this.options.duration + this.startTime ) {
this.now = this.end;//当前的位置为结束位置
this.pos = this.state = 1;//当前的state,pos的比率为1.最大。
this.update();//显示
//标识这个属性的动画已经完成
this.options.curAnim[ this.prop ] = true;
//再一次判断是否完成
var done = true;
for ( var i in this.options.curAnim )
if ( this.options.curAnim[i] !== true )
done = false;
if ( done ) {
if ( this.options.display != null ) {// 恢复overflow
this.elem.style.overflow = this.options.overflow;
// 恢复 display
this.elem.style.display = this.options.display;
//判断其是否恢复成功,
if ( jQuery.css(this.elem, "display") == "none" )
this.elem.style.display = "block";
}
//如果是hide的操作
if ( this.options.hide )
this.elem.style.display = "none";
//如果元素已经show或hide,恢复其动画改变的属性
if ( this.options.hide || this.options.show )
for ( var p in this.options.curAnim )
jQuery.attr(this.elem.style, p,
this.options.orig[p]);
}
if ( done )// 运行complete的回调函数
this.options.complete.call( this.elem );
return false;
} else {
var n = t - this.startTime;//时间间隔
this.state = n / this.options.duration;//时间间隔比率
//根据时间间隔的比率再按一定的算法比率来计算
//当前的运动的位置点的比率。默认是swing的算法
this.pos = jQuery.easing[this.options.easing ||
(jQuery.easing.swing ? "swing" : "linear")]
(this.state, n, 0, 1, this.options.duration);
//当前的位置
this.now = this.start + ((this.end - this.start) * this.pos);
// 显示
this.update();
}
return true;
}
更多精彩
赞助商链接