1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports.default = void 0;
|
9 |
|
10 | var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
11 |
|
12 | var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
13 |
|
14 | var _timelime = _interopRequireDefault(require("./timelime"));
|
15 |
|
16 | var _animator2 = _interopRequireDefault(require("./animator"));
|
17 |
|
18 | var _jsx = require("../../jsx");
|
19 |
|
20 |
|
21 | function eachElement(element, fn) {
|
22 | fn(element);
|
23 | var children = element.get('children');
|
24 |
|
25 | if (children && children.length) {
|
26 | for (var i = 0, len = children.length; i < len; i++) {
|
27 | var child = children[i];
|
28 | eachElement(child, fn);
|
29 | }
|
30 | }
|
31 | }
|
32 |
|
33 | var Animation = function () {
|
34 | function Animation(canvas) {
|
35 | (0, _classCallCheck2.default)(this, Animation);
|
36 | this.timeline = new _timelime.default();
|
37 | this.canvas = canvas;
|
38 | }
|
39 |
|
40 | (0, _createClass2.default)(Animation, [{
|
41 | key: "createAnimator",
|
42 | value: function createAnimator(element, animation) {
|
43 | var duration = animation.duration,
|
44 | property = animation.property,
|
45 | onFrame = animation.onFrame;
|
46 |
|
47 | if (!duration || (!property || !property.length) && !onFrame) {
|
48 | return;
|
49 | }
|
50 |
|
51 | return new _animator2.default(element, animation);
|
52 | }
|
53 | }, {
|
54 | key: "play",
|
55 | value: function play(container, onAnimationEnd) {
|
56 | var _this = this;
|
57 |
|
58 | var canvas = this.canvas;
|
59 | var animators = [];
|
60 | var maxDuration = 0;
|
61 | var deleteElements = [];
|
62 |
|
63 | eachElement(container, function (element) {
|
64 |
|
65 | var _element$_attrs = element._attrs,
|
66 | animation = _element$_attrs.animation,
|
67 | status = _element$_attrs.status;
|
68 |
|
69 | if (!animation) {
|
70 | if (status === _jsx.ElementStatus.ELEMENT_DELETE) {
|
71 |
|
72 | deleteElements.push(element);
|
73 | }
|
74 |
|
75 | return;
|
76 | }
|
77 |
|
78 | var animator = _this.createAnimator(element, animation);
|
79 |
|
80 | if (animator) {
|
81 | maxDuration = Math.max(maxDuration, animator.totalDuration);
|
82 | animators.push(animator);
|
83 | }
|
84 |
|
85 | var clip = animation.clip;
|
86 |
|
87 | if (clip) {
|
88 | clip.isClip = true;
|
89 | var clipElement = clip.element;
|
90 |
|
91 | var _animator = _this.createAnimator(clipElement, clip);
|
92 |
|
93 | if (_animator) {
|
94 | maxDuration = Math.max(maxDuration, _animator.totalDuration);
|
95 | element.attr('clip', clipElement);
|
96 | animators.push(_animator);
|
97 | }
|
98 | }
|
99 | });
|
100 |
|
101 | for (var i = 0, len = deleteElements.length; i < len; i++) {
|
102 | var element = deleteElements[i];
|
103 | var children = element._attrs.children;
|
104 |
|
105 | if (!children || !children.length) {
|
106 | element.remove(true);
|
107 | }
|
108 | }
|
109 |
|
110 |
|
111 | this.timeline.play(maxDuration, function (time) {
|
112 | for (var _i = 0, _len = animators.length; _i < _len; _i++) {
|
113 | var animator = animators[_i];
|
114 | animator.to(time);
|
115 | }
|
116 |
|
117 |
|
118 | if (time < maxDuration) {
|
119 | canvas.draw();
|
120 | }
|
121 | }, function () {
|
122 | for (var _i2 = 0, _len2 = deleteElements.length; _i2 < _len2; _i2++) {
|
123 | var _element = deleteElements[_i2];
|
124 |
|
125 | _element.remove(true);
|
126 | }
|
127 |
|
128 | canvas.draw();
|
129 | onAnimationEnd && onAnimationEnd();
|
130 | });
|
131 | }
|
132 |
|
133 | }, {
|
134 | key: "end",
|
135 | value: function end() {
|
136 | this.timeline.end();
|
137 | }
|
138 | }, {
|
139 | key: "abort",
|
140 | value: function abort() {
|
141 | this.timeline.abort();
|
142 | }
|
143 | }]);
|
144 | return Animation;
|
145 | }();
|
146 |
|
147 | var _default = Animation;
|
148 | exports.default = _default; |
\ | No newline at end of file |