cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
145 lines (144 loc) • 3.76 kB
JavaScript
import { __extends } from "../../../tslib/tslib.es6.mjs";
import Eventful from "../core/Eventful.mjs";
import requestAnimationFrame from "./requestAnimationFrame.mjs";
import Animator from "./Animator.mjs";
function getTime() {
return new Date().getTime();
}
var Animation = function(_super) {
__extends(Animation2, _super);
function Animation2(opts) {
var _this = _super.call(this) || this;
_this._running = false;
_this._time = 0;
_this._pausedTime = 0;
_this._pauseStart = 0;
_this._paused = false;
opts = opts || {};
_this.stage = opts.stage || {};
return _this;
}
Animation2.prototype.addClip = function(clip) {
if (clip.animation) {
this.removeClip(clip);
}
if (!this._head) {
this._head = this._tail = clip;
} else {
this._tail.next = clip;
clip.prev = this._tail;
clip.next = null;
this._tail = clip;
}
clip.animation = this;
};
Animation2.prototype.addAnimator = function(animator) {
animator.animation = this;
var clip = animator.getClip();
if (clip) {
this.addClip(clip);
}
};
Animation2.prototype.removeClip = function(clip) {
if (!clip.animation) {
return;
}
var prev = clip.prev;
var next = clip.next;
if (prev) {
prev.next = next;
} else {
this._head = next;
}
if (next) {
next.prev = prev;
} else {
this._tail = prev;
}
clip.next = clip.prev = clip.animation = null;
};
Animation2.prototype.removeAnimator = function(animator) {
var clip = animator.getClip();
if (clip) {
this.removeClip(clip);
}
animator.animation = null;
};
Animation2.prototype.update = function(notTriggerFrameAndStageUpdate) {
var time = getTime() - this._pausedTime;
var delta = time - this._time;
var clip = this._head;
while (clip) {
var nextClip = clip.next;
var finished = clip.step(time, delta);
if (finished) {
clip.ondestroy();
this.removeClip(clip);
clip = nextClip;
} else {
clip = nextClip;
}
}
this._time = time;
if (!notTriggerFrameAndStageUpdate) {
this.trigger("frame", delta);
this.stage.update && this.stage.update();
}
};
Animation2.prototype._startLoop = function() {
var self = this;
this._running = true;
function step() {
if (self._running) {
requestAnimationFrame(step);
!self._paused && self.update();
}
}
requestAnimationFrame(step);
};
Animation2.prototype.start = function() {
if (this._running) {
return;
}
this._time = getTime();
this._pausedTime = 0;
this._startLoop();
};
Animation2.prototype.stop = function() {
this._running = false;
};
Animation2.prototype.pause = function() {
if (!this._paused) {
this._pauseStart = getTime();
this._paused = true;
}
};
Animation2.prototype.resume = function() {
if (this._paused) {
this._pausedTime += getTime() - this._pauseStart;
this._paused = false;
}
};
Animation2.prototype.clear = function() {
var clip = this._head;
while (clip) {
var nextClip = clip.next;
clip.prev = clip.next = clip.animation = null;
clip = nextClip;
}
this._head = this._tail = null;
};
Animation2.prototype.isFinished = function() {
return this._head == null;
};
Animation2.prototype.animate = function(target, options) {
options = options || {};
this.start();
var animator = new Animator(target, options.loop);
this.addAnimator(animator);
return animator;
};
return Animation2;
}(Eventful);
var Animation$1 = Animation;
export { Animation$1 as default, getTime };