UNPKG

4.34 kBJavaScriptView Raw
1import { __decorate } from "tslib";
2import { singleton } from 'mana-syringe';
3import { Opx, Odeg } from '../cssom';
4import { parseTransform, mergeTransforms } from '../parser';
5/**
6 * @see /zh/docs/api/animation#支持变换的属性
7 *
8 * support the following formats like CSS Transform:
9 *
10 * scale
11 * * scale(x, y)
12 * * scaleX(x)
13 * * scaleY(x)
14 * * scaleZ(z)
15 * * scale3d(x, y, z)
16 *
17 * translate (unit: none, px, %(relative to its bounds))
18 * * translate(x, y) eg. translate(0, 0) translate(0, 30px) translate(100%, 100%)
19 * * translateX(0)
20 * * translateY(0)
21 * * translateZ(0)
22 * * translate3d(0, 0, 0)
23 *
24 * rotate (unit: deg rad turn)
25 * * rotate(0.5turn) rotate(30deg) rotate(1rad)
26 *
27 * none
28 *
29 * unsupported for now:
30 * * calc() eg. translate(calc(100% + 10px))
31 * * matrix/matrix3d()
32 * * skew/skewX/skewY
33 * * perspective
34 */
35
36var CSSPropertyTransform =
37/** @class */
38function () {
39 function CSSPropertyTransform() {
40 this.parser = parseTransform;
41 this.mixer = mergeTransforms;
42 }
43
44 CSSPropertyTransform.prototype.postProcessor = function (object) {
45 var _a = object.parsedStyle,
46 transform = _a.transform,
47 defX = _a.defX,
48 defY = _a.defY;
49
50 if (transform && transform.length) {
51 // reset transform
52 object.resetLocalTransform();
53 object.setLocalPosition(defX, defY);
54 transform.forEach(function (_a) {
55 var t = _a.t,
56 d = _a.d;
57
58 if (t === 'scale') {
59 // scale(1) scale(1, 1)
60 var newScale = d.map(function (s) {
61 return s.value;
62 }) || [1, 1];
63 object.scaleLocal(newScale[0], newScale[1], 1);
64 } else if (t === 'scalex') {
65 var newScale = d.map(function (s) {
66 return s.value;
67 }) || [1];
68 object.scaleLocal(newScale[0], 1, 1);
69 } else if (t === 'scaley') {
70 var newScale = d.map(function (s) {
71 return s.value;
72 }) || [1];
73 object.scaleLocal(1, newScale[0], 1);
74 } else if (t === 'scalez') {
75 var newScale = d.map(function (s) {
76 return s.value;
77 }) || [1];
78 object.scaleLocal(1, 1, newScale[0]);
79 } else if (t === 'scale3d') {
80 var newScale = d.map(function (s) {
81 return s.value;
82 }) || [1, 1, 1];
83 object.scaleLocal(newScale[0], newScale[1], newScale[2]);
84 } else if (t === 'translate') {
85 var newTranslation = d || [Opx, Opx];
86 object.translateLocal(newTranslation[0].value, newTranslation[1].value, 0);
87 } else if (t === 'translatex') {
88 var newTranslation = d || [Opx];
89 object.translateLocal(newTranslation[0].value, 0, 0);
90 } else if (t === 'translatey') {
91 var newTranslation = d || [Opx];
92 object.translateLocal(0, newTranslation[0].value, 0);
93 } else if (t === 'translatez') {
94 var newTranslation = d || [Opx];
95 object.translateLocal(0, 0, newTranslation[0].value);
96 } else if (t === 'translate3d') {
97 var newTranslation = d || [Opx, Opx, Opx];
98 object.translateLocal(newTranslation[0].value, newTranslation[1].value, newTranslation[2].value);
99 } else if (t === 'rotate') {
100 var newAngles = d || [Odeg];
101 object.rotateLocal(0, 0, newAngles[0].value);
102 } else if (t === 'rotatex') {
103 var newAngles = d || [Odeg];
104 object.rotateLocal(newAngles[0].value, 0, 0);
105 } else if (t === 'rotatey') {
106 var newAngles = d || [Odeg];
107 object.rotateLocal(0, newAngles[0].value, 0);
108 } else if (t === 'rotatez') {
109 var newAngles = d || [Odeg];
110 object.rotateLocal(0, 0, newAngles[0].value);
111 } else if (t === 'rotate3d') {// 暂不支持绕指定轴旋转
112 // const newAngles = value && value.d || [Odeg, Odeg, Odeg];
113 // const oldAngles = old && old.d || [Odeg, Odeg, Odeg];
114 // object.rotateLocal(
115 // newAngles[0].value - oldAngles[0].value,
116 // newAngles[1].value - oldAngles[1].value,
117 // newAngles[2].value - oldAngles[2].value,
118 // );
119 }
120 });
121 }
122 };
123
124 CSSPropertyTransform = __decorate([singleton()], CSSPropertyTransform);
125 return CSSPropertyTransform;
126}();
127
128export { CSSPropertyTransform };
\No newline at end of file