@visactor/vchart
Version:
charts lib based @visactor/VGrammar
37 lines (33 loc) • 1.54 kB
JavaScript
import { mixin } from "@visactor/vutils";
import { GrammarDetector } from "./grammar-dector";
import { BaseMark } from "../mark";
class SequentialAnimate {
registerAnimationSplitStrategy(strategy) {
this._grammarDetector || (this._grammarDetector = new GrammarDetector(this)), this._grammarDetector.registerStrategy(strategy);
}
getGrammarDetector() {
return this.initGrammarDetector(), this._grammarDetector;
}
initGrammarDetector() {
this._grammarDetector || (this._grammarDetector = new GrammarDetector(this));
}
_runSequentialAnimations(graphics) {
this.initGrammarDetector();
const animationConfig = this.getAnimationConfig(), detectionResult = this._grammarDetector.detect(graphics, this._graphicMap), planners = this._grammarDetector.createPlanners(detectionResult, animationConfig);
this._executePlanners(planners, 0);
}
_executePlanners(planners, index) {
if (index >= planners.length) return;
const planner = planners[index];
planner.execute(this._product, (() => {
this._executePlanners(planners, index + 1), "exit" === planner.state && planner.graphics.forEach((g => {
g.isExiting && (this._graphicMap.delete(g.context.uniqueKey), g.parent && g.parent.removeChild(g),
g.release && g.release());
}));
}));
}
}
export function registerSequentialAnimate() {
mixin(BaseMark, SequentialAnimate);
}
//# sourceMappingURL=sequential-animate.js.map