📄 animations.js
字号:
/// derived animations like <see cref="AjaxControlToolkit.Animation.SequenceAnimation" />, but not for
/// others like <see cref="AjaxControlToolkit.Animation.ParallelAnimation" />). To manipulate the child
/// animations, use the functions <code>add</code>, <code>clear</code>, <code>remove</code>, and <code>removeAt</code>.
/// </value>
return this._animations;
},
add : function(animation) {
/// <summary>
/// Add an animation as a child of this animation.
/// </summary>
/// <param name="animation" type="AjaxControlToolkit.Animation.Animation">Child animation to add</param>
/// <returns />
if (this._animations) {
if (animation) {
animation._parentAnimation = this;
}
Array.add(this._animations, animation);
this.raisePropertyChanged('animations');
}
},
remove : function(animation) {
/// <summary>
/// Remove the animation from the array of child animations.
/// </summary>
/// <param name="animation" type="AjaxControlToolkit.Animation.Animation">
/// Child animation to remove
/// </param>
/// <returns />
/// <remarks>
/// This will dispose the removed animation.
/// </remarks>
if (this._animations) {
if (animation) {
animation.dispose();
}
Array.remove(this._animations, animation);
this.raisePropertyChanged('animations');
}
},
removeAt : function(index) {
/// <summary>
/// Remove the animation at a given index from the array of child animations.
/// </summary>
/// <param name="index" type="Number" integer="true">
/// Index of the child animation to remove
/// </param>
/// <returns />
if (this._animations) {
var animation = this._animations[index];
if (animation) {
animation.dispose();
}
Array.removeAt(this._animations, index);
this.raisePropertyChanged('animations');
}
},
clear : function() {
/// <summary>
/// Clear the array of child animations.
/// </summary>
/// <remarks>
/// This will dispose the cleared child animations.
/// </remarks>
/// <returns />
if (this._animations) {
for (var i = this._animations.length - 1; i >= 0; i--) {
this._animations[i].dispose();
this._animations[i] = null;
}
Array.clear(this._animations);
this._animations = [];
this.raisePropertyChanged('animations');
}
}
}
$AA.ParentAnimation.registerClass('AjaxControlToolkit.Animation.ParentAnimation', $AA.Animation);
$AA.registerAnimation('parent', $AA.ParentAnimation);
$AA.ParallelAnimation = function(target, duration, fps, animations) {
/// <summary>
/// The <code>ParallelAnimation</code> plays several animations simultaneously. It inherits from
/// <see cref="AjaxControlToolkit.Animation.ParentAnimation" />, but makes itself the owner of all
/// its child animations to allow the use a single timer and syncrhonization mechanisms shared with
/// all the children (in other words, the <code>duration</code> properties of any child animations
/// are ignored in favor of the parent's <code>duration</code>). It is very useful in creating
/// sophisticated effects through combination of simpler animations.
/// </summary>
/// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
/// Target of the animation
/// </param>
/// <param name="duration" type="Number" mayBeNull="true" optional="true">
/// Length of the animation in seconds. The default is 1.
/// </param>
/// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
/// Number of steps per second. The default is 25.
/// </param>
/// <param name="animations" mayBeNull="true" optional="true" parameterArray="true" elementType="AjaxControlToolkit.Animation.Animation">
/// Array of child animations
/// </param>
/// <animation>Parallel</animation>
$AA.ParallelAnimation.initializeBase(this, [target, duration, fps, animations]);
}
$AA.ParallelAnimation.prototype = {
add : function(animation) {
/// <summary>
/// Add an animation as a child of this animation and make ourselves its owner.
/// </summary>
/// <param name="animation" type="AjaxControlToolkit.Animation.Animation">Child animation to add</param>
/// <returns />
$AA.ParallelAnimation.callBaseMethod(this, 'add', [animation]);
animation.setOwner(this);
},
onStart : function() {
/// <summary>
/// Get the child animations ready to play
/// </summary>
/// <returns />
$AA.ParallelAnimation.callBaseMethod(this, 'onStart');
var animations = this.get_animations();
for (var i = 0; i < animations.length; i++) {
animations[i].onStart();
}
},
onStep : function(percentage) {
/// <summary>
/// Progress the child animations through each frame
/// </summary>
/// <param name="percentage" type="Number">
/// Percentage of the animation already complete
/// </param>
/// <returns />
var animations = this.get_animations();
for (var i = 0; i < animations.length; i++) {
animations[i].onStep(percentage);
}
},
onEnd : function() {
/// <summary>
/// Finish playing all of the child animations
/// </summary>
/// <returns />
var animations = this.get_animations();
for (var i = 0; i < animations.length; i++) {
animations[i].onEnd();
}
$AA.ParallelAnimation.callBaseMethod(this, 'onEnd');
}
}
$AA.ParallelAnimation.registerClass('AjaxControlToolkit.Animation.ParallelAnimation', $AA.ParentAnimation);
$AA.registerAnimation('parallel', $AA.ParallelAnimation);
$AA.SequenceAnimation = function(target, duration, fps, animations, iterations) {
/// <summary>
/// The <code>SequenceAnimation</code> runs several animations one after the other. It can also
/// repeat the sequence of animations for a specified number of iterations (which defaults to a
/// single iteration, but will repeat forever if you specify zero or less iterations). Also, the
/// <code>SequenceAnimation</code> cannot be a child of a <see cref="AjaxControlToolkit.Animation.ParallelAnimation" />
/// (or any animation inheriting from it).
/// </summary>
/// <param name="target" type="Sys.UI.DomElement" mayBeNull="true" optional="true" domElement="true">
/// Target of the animation
/// </param>
/// <param name="duration" type="Number" mayBeNull="true" optional="true">
/// Length of the animation in seconds. The default is 1.
/// </param>
/// <param name="fps" type="Number" mayBeNull="true" optional="true" integer="true">
/// Number of steps per second. The default is 25.
/// </param>
/// <param name="animations" mayBeNull="true" optional="true" parameterArray="true" elementType="AjaxControlToolkit.Animation.Animation">
/// Array of child animations
/// </param>
/// <param name="iterations" type="Number" mayBeNull="true" optional="true" integer="true">
/// Number of times to repeatedly play the sequence. If zero or less iterations are specified, the sequence
/// will repeat forever. The default value is 1 iteration.
/// </param>
/// <remarks>
/// The <code>SequenceAnimation</code> ignores the <code>duration</code> and <code>fps</code>
/// properties, and will let each of its child animations use any settings they please.
/// </remarks>
/// <animation>Sequence</animation>
$AA.SequenceAnimation.initializeBase(this, [target, duration, fps, animations]);
// Handler used to determine when an animation has finished
this._handler = null;
// Flags to note whether we're playing, paused, or stopped
this._paused = false;
this._playing = false;
// Index of the currently executing animation in the sequence
this._index = 0;
// Counter used when playing the animation to determine the remaining number of times to play the entire sequence
this._remainingIterations = 0;
// Number of iterations
this._iterations = (iterations !== undefined) ? iterations : 1;
}
$AA.SequenceAnimation.prototype = {
dispose : function() {
/// <summary>
/// Dispose the animation
/// </summary>
/// <returns />
this._handler = null;
$AA.SequenceAnimation.callBaseMethod(this, 'dispose');
},
stop : function() {
/// <summary>
/// Stop playing the entire sequence of animations
/// </summary>
/// <returns />
/// <remarks>
/// Stopping this animation will perform the last step of each child animation, thereby leaving their
/// target elements in a state consistent with the animation playing completely. If this animation is
/// the child of another, you must call <code>stop</code> on its parent instead.
/// </remarks>
if (this._playing) {
var animations = this.get_animations();
if (this._index < animations.length) {
// Remove the handler from the currently running animation
animations[this._index].remove_ended(this._handler);
// Call stop on all remaining animations to ensure their
// effects will be seen
for (var i = this._index; i < animations.length; i++) {
animations[i].stop();
}
}
this._playing = false;
this._paused = false;
this.raisePropertyChanged('isPlaying');
this.onEnd();
}
},
pause : function() {
/// <summary>
/// Pause the animation if it is playing. Calling <code>play</code> will resume where
/// the animation left off.
/// </summary>
/// <returns />
/// <remarks>
/// If this animation is the child of another, you must call <code>pause</code> on its parent instead.
/// </remarks>
if (this.get_isPlaying()) {
var current = this.get_animations()[this._index];
if (current != null) {
current.pause();
}
this._paused = true;
this.raisePropertyChanged('isPlaying');
}
},
play : function() {
/// <summary>
/// Play the sequence of animations from the beginning or where it was left off when paused
/// </summary>
/// <returns />
/// <remarks>
/// If this animation is the child of another, you must call <code>play</code> on its parent instead
/// </remarks>
var animations = this.get_animations();
if (!this._playing) {
this._playing = true;
if (this._paused) {
this._paused = false;
var current = animations[this._index];
if (current != null) {
current.play();
this.raisePropertyChanged('isPlaying');
}
} else {
this.onStart();
// Reset the index and attach the handler to the first
this._index = 0;
var first = animations[this._index];
if (first) {
first.add_ended(this._handler);
first.play();
this.raisePropertyChanged('isPlaying');
} else {
this.stop();
}
}
}
},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -