You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
4.4 KiB
178 lines
4.4 KiB
/* |
|
Copyright (c) 2004-2006, The Dojo Foundation |
|
All Rights Reserved. |
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the |
|
modified BSD license. For more information on Dojo licensing, see: |
|
|
|
http://dojotoolkit.org/community/licensing.shtml |
|
*/ |
|
|
|
|
|
dojo.provide("dojo.animation.Animation"); |
|
dojo.require("dojo.animation.AnimationEvent"); |
|
dojo.require("dojo.lang.func"); |
|
dojo.require("dojo.math"); |
|
dojo.require("dojo.math.curves"); |
|
dojo.deprecated("dojo.animation.Animation is slated for removal in 0.5; use dojo.lfx.* instead.","0.5"); |
|
dojo.animation.Animation=function(_1,_2,_3,_4,_5){ |
|
if(dojo.lang.isArray(_1)){ |
|
_1=new dojo.math.curves.Line(_1[0],_1[1]); |
|
} |
|
this.curve=_1; |
|
this.duration=_2; |
|
this.repeatCount=_4||0; |
|
this.rate=_5||25; |
|
if(_3){ |
|
if(dojo.lang.isFunction(_3.getValue)){ |
|
this.accel=_3; |
|
}else{ |
|
var i=0.35*_3+0.5; |
|
this.accel=new dojo.math.curves.CatmullRom([[0],[i],[1]],0.45); |
|
} |
|
} |
|
}; |
|
dojo.lang.extend(dojo.animation.Animation,{curve:null,duration:0,repeatCount:0,accel:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,handler:null,_animSequence:null,_startTime:null,_endTime:null,_lastFrame:null,_timer:null,_percent:0,_active:false,_paused:false,_startRepeatCount:0,play:function(_7){ |
|
if(_7){ |
|
clearTimeout(this._timer); |
|
this._active=false; |
|
this._paused=false; |
|
this._percent=0; |
|
}else{ |
|
if(this._active&&!this._paused){ |
|
return; |
|
} |
|
} |
|
this._startTime=new Date().valueOf(); |
|
if(this._paused){ |
|
this._startTime-=(this.duration*this._percent/100); |
|
} |
|
this._endTime=this._startTime+this.duration; |
|
this._lastFrame=this._startTime; |
|
var e=new dojo.animation.AnimationEvent(this,null,this.curve.getValue(this._percent),this._startTime,this._startTime,this._endTime,this.duration,this._percent,0); |
|
this._active=true; |
|
this._paused=false; |
|
if(this._percent==0){ |
|
if(!this._startRepeatCount){ |
|
this._startRepeatCount=this.repeatCount; |
|
} |
|
e.type="begin"; |
|
if(typeof this.handler=="function"){ |
|
this.handler(e); |
|
} |
|
if(typeof this.onBegin=="function"){ |
|
this.onBegin(e); |
|
} |
|
} |
|
e.type="play"; |
|
if(typeof this.handler=="function"){ |
|
this.handler(e); |
|
} |
|
if(typeof this.onPlay=="function"){ |
|
this.onPlay(e); |
|
} |
|
if(this._animSequence){ |
|
this._animSequence._setCurrent(this); |
|
} |
|
this._cycle(); |
|
},pause:function(){ |
|
clearTimeout(this._timer); |
|
if(!this._active){ |
|
return; |
|
} |
|
this._paused=true; |
|
var e=new dojo.animation.AnimationEvent(this,"pause",this.curve.getValue(this._percent),this._startTime,new Date().valueOf(),this._endTime,this.duration,this._percent,0); |
|
if(typeof this.handler=="function"){ |
|
this.handler(e); |
|
} |
|
if(typeof this.onPause=="function"){ |
|
this.onPause(e); |
|
} |
|
},playPause:function(){ |
|
if(!this._active||this._paused){ |
|
this.play(); |
|
}else{ |
|
this.pause(); |
|
} |
|
},gotoPercent:function(_a,_b){ |
|
clearTimeout(this._timer); |
|
this._active=true; |
|
this._paused=true; |
|
this._percent=_a; |
|
if(_b){ |
|
this.play(); |
|
} |
|
},stop:function(_c){ |
|
clearTimeout(this._timer); |
|
var _d=this._percent/100; |
|
if(_c){ |
|
_d=1; |
|
} |
|
var e=new dojo.animation.AnimationEvent(this,"stop",this.curve.getValue(_d),this._startTime,new Date().valueOf(),this._endTime,this.duration,this._percent); |
|
if(typeof this.handler=="function"){ |
|
this.handler(e); |
|
} |
|
if(typeof this.onStop=="function"){ |
|
this.onStop(e); |
|
} |
|
this._active=false; |
|
this._paused=false; |
|
},status:function(){ |
|
if(this._active){ |
|
return this._paused?"paused":"playing"; |
|
}else{ |
|
return "stopped"; |
|
} |
|
},_cycle:function(){ |
|
clearTimeout(this._timer); |
|
if(this._active){ |
|
var _f=new Date().valueOf(); |
|
var _10=(_f-this._startTime)/(this._endTime-this._startTime); |
|
var fps=1000/(_f-this._lastFrame); |
|
this._lastFrame=_f; |
|
if(_10>=1){ |
|
_10=1; |
|
this._percent=100; |
|
}else{ |
|
this._percent=_10*100; |
|
} |
|
if(this.accel&&this.accel.getValue){ |
|
_10=this.accel.getValue(_10); |
|
} |
|
var e=new dojo.animation.AnimationEvent(this,"animate",this.curve.getValue(_10),this._startTime,_f,this._endTime,this.duration,this._percent,Math.round(fps)); |
|
if(typeof this.handler=="function"){ |
|
this.handler(e); |
|
} |
|
if(typeof this.onAnimate=="function"){ |
|
this.onAnimate(e); |
|
} |
|
if(_10<1){ |
|
this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate); |
|
}else{ |
|
e.type="end"; |
|
this._active=false; |
|
if(typeof this.handler=="function"){ |
|
this.handler(e); |
|
} |
|
if(typeof this.onEnd=="function"){ |
|
this.onEnd(e); |
|
} |
|
if(this.repeatCount>0){ |
|
this.repeatCount--; |
|
this.play(true); |
|
}else{ |
|
if(this.repeatCount==-1){ |
|
this.play(true); |
|
}else{ |
|
if(this._startRepeatCount){ |
|
this.repeatCount=this._startRepeatCount; |
|
this._startRepeatCount=0; |
|
} |
|
if(this._animSequence){ |
|
this._animSequence._playNext(); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
}});
|
|
|