var AnimationProcess = require("./AnimationProcess");
/**
* @abstract
* @class qrenderer.animation.Animatable
* This is an abstract class for animating. Any class needes animation functions can minxin this implementation.
* The class mixines Animatable should also mixin Eventful to provide the event functions.
*
*
* 动画抽象类。任何需要动画功能的类都可以 mixin 此实现。
* 混入 Animatable 的类必须同时混入 Eventful ,因为动画过程中需要使用事件机制。
*
* @docauthor 大漠穷秋 <damoqiongqiu@126.com>
*/
/**
* @abstract
* @method constructor Animatable
*/
var Animatable = function Animatable() {
/**
* @readonly
* @property {qrenderer.animation.AnimationProcess} animationProcessList
* A list to store the animation processes on current element instance.
*
*
* 当前元素上的动画过程列表。
*/
this.animationProcessList = [];
};
Animatable.prototype = {
constructor: Animatable,
/**
* @method animate
* Creat the AnimationProcess instance.
*
*
* 创建 AnimationProcess 实例。
* @param {String} path
* The path to fetch value from object, like 'a.b.c'.
*
*
* 从对象上获取属性的路径,例如 'a.b.c'。
* @param {Boolean} [loop=false]
* Whether to loop animation.
*
*
* 动画是否循环播放。
* @return {qrenderer.animation.AnimationProcess}
*/
animate: function animate() {
var animatable = this;
var animationProcess = new AnimationProcess(animatable);
animationProcess.on('done', function () {
animatable.removeAnimationProcess(animationProcess);
});
animationProcess.on('stop', function () {
animatable.removeAnimationProcess(animationProcess);
});
animatable.animationProcessList.push(animationProcess);
if (animatable.__qr) {
animatable.__qr.globalAnimationMgr.addAnimatable(animatable);
}
return animationProcess;
},
/**
* @method stopAnimation
* Stop the animation.
*
*
* 停止动画。
* @param {Boolean} forwardToLast
* If move to last frame before stop.
*
*
* 在停止动画之前是否强制移动到最后一帧。
*/
stopAnimation: function stopAnimation() {
var forwardToLast = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
this.animationProcessList.forEach(function (ap) {
ap.stop(forwardToLast);
});
this.animationProcessList.length = 0;
return this;
},
/**
* @method removeAnimationProcess
* Remove the AnimationProcess。
*
*
* 删除动画过程。
* @param {AnimationProcess} animationProcess
*/
removeAnimationProcess: function removeAnimationProcess(animationProcess) {
var index = this.animationProcessList.indexOf(animationProcess);
if (index >= 0) {
this.animationProcessList.splice(index, 1);
}
}
};
var _default = Animatable;
module.exports = _default;