85 lines
1.9 KiB
JavaScript
85 lines
1.9 KiB
JavaScript
import Animator from 'zrender/lib/animation/Animator';
|
|
var animatableMixin = {
|
|
_animators: null,
|
|
getAnimators: function () {
|
|
this._animators = this._animators || [];
|
|
return this._animators;
|
|
},
|
|
animate: function (path, opts) {
|
|
this._animators = this._animators || [];
|
|
var el = this;
|
|
var target;
|
|
|
|
if (path) {
|
|
var pathSplitted = path.split('.');
|
|
var prop = el;
|
|
|
|
for (var i = 0, l = pathSplitted.length; i < l; i++) {
|
|
if (!prop) {
|
|
continue;
|
|
}
|
|
|
|
prop = prop[pathSplitted[i]];
|
|
}
|
|
|
|
if (prop) {
|
|
target = prop;
|
|
}
|
|
} else {
|
|
target = el;
|
|
}
|
|
|
|
if (target == null) {
|
|
throw new Error('Target ' + path + ' not exists');
|
|
}
|
|
|
|
var animators = this._animators;
|
|
var animator = new Animator(target, opts);
|
|
var self = this;
|
|
animator.during(function () {
|
|
if (self.__zr) {
|
|
self.__zr.refresh();
|
|
}
|
|
}).done(function () {
|
|
var idx = animators.indexOf(animator);
|
|
|
|
if (idx >= 0) {
|
|
animators.splice(idx, 1);
|
|
}
|
|
});
|
|
animators.push(animator);
|
|
|
|
if (this.__zr) {
|
|
this.__zr.animation.addAnimator(animator);
|
|
}
|
|
|
|
return animator;
|
|
},
|
|
stopAnimation: function (forwardToLast) {
|
|
this._animators = this._animators || [];
|
|
var animators = this._animators;
|
|
var len = animators.length;
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
animators[i].stop(forwardToLast);
|
|
}
|
|
|
|
animators.length = 0;
|
|
return this;
|
|
},
|
|
addAnimatorsToZr: function (zr) {
|
|
if (this._animators) {
|
|
for (var i = 0; i < this._animators.length; i++) {
|
|
zr.animation.addAnimator(this._animators[i]);
|
|
}
|
|
}
|
|
},
|
|
removeAnimatorsFromZr: function (zr) {
|
|
if (this._animators) {
|
|
for (var i = 0; i < this._animators.length; i++) {
|
|
zr.animation.removeAnimator(this._animators[i]);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
export default animatableMixin; |