@visactor/vrender-components 1.0.0-alpha.5 → 1.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/animation/axis-animate.js +4 -4
- package/cjs/animation/axis-animate.js.map +1 -1
- package/cjs/axis/base.d.ts +1 -0
- package/cjs/axis/base.js +6 -4
- package/cjs/axis/base.js.map +1 -1
- package/cjs/axis/util.js +5 -5
- package/cjs/axis/util.js.map +1 -1
- package/cjs/brush/brush.d.ts +16 -10
- package/cjs/brush/brush.js +81 -93
- package/cjs/brush/brush.js.map +1 -1
- package/cjs/brush/config.d.ts +5 -5
- package/cjs/brush/config.js +5 -5
- package/cjs/brush/config.js.map +1 -1
- package/cjs/brush/type.d.ts +1 -0
- package/cjs/brush/type.js +1 -1
- package/cjs/brush/type.js.map +1 -1
- package/cjs/data-zoom/data-zoom.d.ts +3 -0
- package/cjs/data-zoom/data-zoom.js +36 -19
- package/cjs/data-zoom/data-zoom.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/label/base.js +17 -3
- package/cjs/label/base.js.map +1 -1
- package/cjs/marker/animate/animate.d.ts +3 -3
- package/cjs/marker/animate/animate.js.map +1 -1
- package/cjs/marker/animate/clip-in.d.ts +1 -1
- package/cjs/marker/animate/clip-in.js +6 -3
- package/cjs/marker/animate/clip-in.js.map +1 -1
- package/cjs/marker/animate/fade-in.d.ts +3 -3
- package/cjs/marker/animate/fade-in.js +10 -4
- package/cjs/marker/animate/fade-in.js.map +1 -1
- package/cjs/marker/animate/fade-out.d.ts +3 -3
- package/cjs/marker/animate/fade-out.js +10 -4
- package/cjs/marker/animate/fade-out.js.map +1 -1
- package/cjs/marker/arc-area.d.ts +8 -5
- package/cjs/marker/arc-area.js +18 -39
- package/cjs/marker/arc-area.js.map +1 -1
- package/cjs/marker/arc-line.d.ts +6 -4
- package/cjs/marker/arc-line.js +12 -9
- package/cjs/marker/arc-line.js.map +1 -1
- package/cjs/marker/area.d.ts +6 -4
- package/cjs/marker/area.js +14 -32
- package/cjs/marker/area.js.map +1 -1
- package/cjs/marker/base.d.ts +2 -3
- package/cjs/marker/base.js.map +1 -1
- package/cjs/marker/common-line.d.ts +11 -7
- package/cjs/marker/common-line.js +11 -31
- package/cjs/marker/common-line.js.map +1 -1
- package/cjs/marker/config.d.ts +2 -0
- package/cjs/marker/config.js +2 -0
- package/cjs/marker/config.js.map +1 -1
- package/cjs/marker/line.d.ts +6 -4
- package/cjs/marker/line.js +10 -4
- package/cjs/marker/line.js.map +1 -1
- package/cjs/marker/mixin/label.d.ts +16 -0
- package/cjs/marker/mixin/label.js +57 -0
- package/cjs/marker/mixin/label.js.map +1 -0
- package/cjs/marker/type.d.ts +19 -16
- package/cjs/marker/type.js.map +1 -1
- package/cjs/scrollbar/scrollbar.d.ts +1 -0
- package/cjs/scrollbar/scrollbar.js +21 -12
- package/cjs/scrollbar/scrollbar.js.map +1 -1
- package/cjs/slider/slider.d.ts +3 -0
- package/cjs/slider/slider.js +48 -27
- package/cjs/slider/slider.js.map +1 -1
- package/cjs/switch/switch.js +2 -2
- package/cjs/switch/switch.js.map +1 -1
- package/cjs/util/event.d.ts +1 -0
- package/cjs/util/event.js +14 -0
- package/cjs/util/event.js.map +1 -0
- package/dist/index.es.js +1606 -924
- package/es/animation/axis-animate.js +4 -4
- package/es/animation/axis-animate.js.map +1 -1
- package/es/axis/base.d.ts +1 -0
- package/es/axis/base.js +7 -5
- package/es/axis/base.js.map +1 -1
- package/es/axis/util.js +5 -6
- package/es/axis/util.js.map +1 -1
- package/es/brush/brush.d.ts +16 -10
- package/es/brush/brush.js +83 -95
- package/es/brush/brush.js.map +1 -1
- package/es/brush/config.d.ts +5 -5
- package/es/brush/config.js +5 -5
- package/es/brush/config.js.map +1 -1
- package/es/brush/type.d.ts +1 -0
- package/es/brush/type.js +1 -1
- package/es/brush/type.js.map +1 -1
- package/es/data-zoom/data-zoom.d.ts +3 -0
- package/es/data-zoom/data-zoom.js +35 -16
- package/es/data-zoom/data-zoom.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/label/base.js +17 -3
- package/es/label/base.js.map +1 -1
- package/es/marker/animate/animate.d.ts +3 -3
- package/es/marker/animate/animate.js.map +1 -1
- package/es/marker/animate/clip-in.d.ts +1 -1
- package/es/marker/animate/clip-in.js +6 -2
- package/es/marker/animate/clip-in.js.map +1 -1
- package/es/marker/animate/fade-in.d.ts +3 -3
- package/es/marker/animate/fade-in.js +11 -3
- package/es/marker/animate/fade-in.js.map +1 -1
- package/es/marker/animate/fade-out.d.ts +3 -3
- package/es/marker/animate/fade-out.js +11 -3
- package/es/marker/animate/fade-out.js.map +1 -1
- package/es/marker/arc-area.d.ts +8 -5
- package/es/marker/arc-area.js +19 -41
- package/es/marker/arc-area.js.map +1 -1
- package/es/marker/arc-line.d.ts +6 -4
- package/es/marker/arc-line.js +12 -9
- package/es/marker/arc-line.js.map +1 -1
- package/es/marker/area.d.ts +6 -4
- package/es/marker/area.js +15 -34
- package/es/marker/area.js.map +1 -1
- package/es/marker/base.d.ts +2 -3
- package/es/marker/base.js.map +1 -1
- package/es/marker/common-line.d.ts +11 -7
- package/es/marker/common-line.js +14 -34
- package/es/marker/common-line.js.map +1 -1
- package/es/marker/config.d.ts +2 -0
- package/es/marker/config.js +2 -0
- package/es/marker/config.js.map +1 -1
- package/es/marker/line.d.ts +6 -4
- package/es/marker/line.js +10 -4
- package/es/marker/line.js.map +1 -1
- package/es/marker/mixin/label.d.ts +16 -0
- package/es/marker/mixin/label.js +45 -0
- package/es/marker/mixin/label.js.map +1 -0
- package/es/marker/type.d.ts +19 -16
- package/es/marker/type.js.map +1 -1
- package/es/scrollbar/scrollbar.d.ts +1 -0
- package/es/scrollbar/scrollbar.js +22 -11
- package/es/scrollbar/scrollbar.js.map +1 -1
- package/es/slider/slider.d.ts +3 -0
- package/es/slider/slider.js +49 -26
- package/es/slider/slider.js.map +1 -1
- package/es/switch/switch.js +2 -2
- package/es/switch/switch.js.map +1 -1
- package/es/util/event.d.ts +1 -0
- package/es/util/event.js +6 -0
- package/es/util/event.js.map +1 -0
- package/package.json +9 -9
package/cjs/brush/brush.js
CHANGED
|
@@ -14,80 +14,41 @@ const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@v
|
|
|
14
14
|
class Brush extends base_1.AbstractComponent {
|
|
15
15
|
constructor(attributes, options) {
|
|
16
16
|
super((null == options ? void 0 : options.skipDefault) ? attributes : (0, vutils_1.merge)({}, Brush.defaultAttributes, attributes)),
|
|
17
|
-
this.name = "brush", this._activeDrawState = !1, this._cacheDrawPoints = [], this.
|
|
18
|
-
this.
|
|
19
|
-
this._operatingMaskMoveDy = 0, this._operatingMaskMoveRangeX = [ -1 / 0, 1 / 0 ],
|
|
17
|
+
this.name = "brush", this._activeDrawState = !1, this._cacheDrawPoints = [], this._activeMoveState = !1,
|
|
18
|
+
this._operatingMaskMoveDx = 0, this._operatingMaskMoveDy = 0, this._operatingMaskMoveRangeX = [ -1 / 0, 1 / 0 ],
|
|
20
19
|
this._operatingMaskMoveRangeY = [ -1 / 0, 1 / 0 ], this._brushMaskAABBBoundsDict = {},
|
|
21
|
-
this._onBrushStart = e => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
this.
|
|
20
|
+
this._firstUpdate = !0, this._onBrushStart = e => {
|
|
21
|
+
if (this._outOfInteractiveRange(e)) return void (this._isEmptyMask() || (this._clearMask(),
|
|
22
|
+
this._dispatchBrushEvent(type_1.IOperateType.brushClear, e)));
|
|
23
|
+
const {updateTrigger: updateTrigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger: endTrigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.endTrigger, brushMoved: brushMoved = !0} = this.attribute;
|
|
24
|
+
(0, vutils_1.array)(updateTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushingWithDelay))),
|
|
25
|
+
(0, vutils_1.array)(endTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushEnd))),
|
|
26
|
+
e.stopPropagation(), this._firstUpdate = !0, this._activeMoveState = brushMoved && this._isPosInBrushMask(e),
|
|
27
|
+
this._activeDrawState = !this._activeMoveState, this._startPos = this.eventPosToStagePos(e),
|
|
28
|
+
this._cacheDrawPoints = [ this._startPos ];
|
|
28
29
|
}, this._onBrushing = e => {
|
|
29
|
-
this._outOfInteractiveRange(e) || ((this.
|
|
30
|
-
this.
|
|
30
|
+
this._outOfInteractiveRange(e) || (e.stopPropagation(), this._firstUpdate ? (this._activeDrawState && this._initDraw(e),
|
|
31
|
+
this._activeMoveState && this._initMove(e), this._firstUpdate = !1) : (this._activeDrawState && this._drawing(e),
|
|
32
|
+
this._activeMoveState && this._moving(e)));
|
|
31
33
|
}, this._onBrushingWithDelay = 0 === this.attribute.delayTime ? this._onBrushing : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime),
|
|
32
34
|
this._onBrushEnd = e => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
e.preventDefault();
|
|
36
|
-
const {removeOnClick: removeOnClick = !0} = this.attribute;
|
|
37
|
-
this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick ? ((null === (_a = this._operatingMask) || void 0 === _a ? void 0 : _a._AABBBounds.empty()) && this._dispatchEvent(type_1.IOperateType.brushClear, {
|
|
38
|
-
operateMask: this._operatingMask,
|
|
39
|
-
operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
|
|
40
|
-
event: e
|
|
41
|
-
}), this._container.incrementalClearChild(), this._brushMaskAABBBoundsDict = {}) : (this._activeDrawState && this._dispatchEvent(type_1.IOperateType.drawEnd, {
|
|
42
|
-
operateMask: this._operatingMask,
|
|
43
|
-
operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
|
|
44
|
-
event: e
|
|
45
|
-
}), this._activeMoveState && this._dispatchEvent(type_1.IOperateType.moveEnd, {
|
|
46
|
-
operateMask: this._operatingMask,
|
|
47
|
-
operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
|
|
48
|
-
event: e
|
|
49
|
-
})), this._activeDrawState = !1, this._activeMoveState = !1, this._isDrawedBeforeEnd = !1,
|
|
50
|
-
this._operatingMask && this._operatingMask.setAttribute("pickable", !1);
|
|
35
|
+
this._releaseBrushUpdateEvents(), e.preventDefault(), this._activeDrawState && this._drawEnd(e),
|
|
36
|
+
this._activeMoveState && this._moveEnd(e), this._activeDrawState = !1, this._activeMoveState = !1;
|
|
51
37
|
}, this._onBrushClear = e => {
|
|
52
|
-
e.preventDefault()
|
|
53
|
-
|
|
54
|
-
this._isDownBeforeUpOutside && removeOnClick && (this._dispatchEvent(type_1.IOperateType.brushClear, {
|
|
55
|
-
operateMask: this._operatingMask,
|
|
56
|
-
operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
|
|
57
|
-
event: e
|
|
58
|
-
}), this._container.incrementalClearChild(), this._brushMaskAABBBoundsDict = {}),
|
|
59
|
-
this._activeDrawState = !1, this._activeMoveState = !1, this._isDrawedBeforeEnd = !1,
|
|
60
|
-
this._isDownBeforeUpOutside = !1, this._operatingMask && this._operatingMask.setAttribute("pickable", !1);
|
|
38
|
+
e.preventDefault(), this._isEmptyMask() || (this._clearMask(), this._dispatchBrushEvent(type_1.IOperateType.brushClear, e)),
|
|
39
|
+
this._activeDrawState = !1, this._activeMoveState = !1;
|
|
61
40
|
};
|
|
62
41
|
}
|
|
63
42
|
_bindBrushEvents() {
|
|
64
|
-
if (this.attribute.disableTriggerEvent) return;
|
|
65
|
-
const {trigger: trigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.trigger,
|
|
66
|
-
(0, vutils_1.array)(trigger).forEach((t =>
|
|
67
|
-
(0, vutils_1.array)(updateTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushingWithDelay))),
|
|
68
|
-
(0, vutils_1.array)(endTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushEnd))),
|
|
43
|
+
if (this.releaseBrushEvents(), this.attribute.disableTriggerEvent) return;
|
|
44
|
+
const {trigger: trigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.trigger, resetTrigger: resetTrigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.resetTrigger} = this.attribute;
|
|
45
|
+
(0, vutils_1.array)(trigger).forEach((t => this.stage.addEventListener(t, this._onBrushStart))),
|
|
69
46
|
(0, vutils_1.array)(resetTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushClear)));
|
|
70
47
|
}
|
|
71
|
-
_isPosInBrushMask(e) {
|
|
72
|
-
const pos = this.eventPosToStagePos(e), brushMasks = this._container.getChildren();
|
|
73
|
-
for (let i = 0; i < brushMasks.length; i++) {
|
|
74
|
-
const {points: points = [], dx: dx = 0, dy: dy = 0} = brushMasks[i].attribute, pointsConsiderOffset = points.map((point => ({
|
|
75
|
-
x: point.x + dx,
|
|
76
|
-
y: point.y + dy
|
|
77
|
-
})));
|
|
78
|
-
if ((0, vutils_1.polygonContainPoint)(pointsConsiderOffset, pos.x, pos.y)) return this._operatingMask = brushMasks[i],
|
|
79
|
-
!0;
|
|
80
|
-
}
|
|
81
|
-
return !1;
|
|
82
|
-
}
|
|
83
48
|
_initDraw(e) {
|
|
84
49
|
const {brushMode: brushMode} = this.attribute, pos = this.eventPosToStagePos(e);
|
|
85
|
-
this._cacheDrawPoints
|
|
86
|
-
this.
|
|
87
|
-
operateMask: this._operatingMask,
|
|
88
|
-
operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
|
|
89
|
-
event: e
|
|
90
|
-
});
|
|
50
|
+
this._cacheDrawPoints.push(pos), "single" === brushMode && this._clearMask(), this._addBrushMask(),
|
|
51
|
+
this._dispatchBrushEvent(type_1.IOperateType.drawStart, e), 1 === Object.keys(this._brushMaskAABBBoundsDict).length && this._dispatchBrushEvent(type_1.IOperateType.brushActive, e);
|
|
91
52
|
}
|
|
92
53
|
_initMove(e) {
|
|
93
54
|
var _a, _b;
|
|
@@ -95,30 +56,18 @@ class Brush extends base_1.AbstractComponent {
|
|
|
95
56
|
this._operatingMaskMoveDy = null !== (_b = this._operatingMask.attribute.dy) && void 0 !== _b ? _b : 0;
|
|
96
57
|
const {interactiveRange: interactiveRange} = this.attribute, {minY: minY = -1 / 0, maxY: maxY = 1 / 0, minX: minX = -1 / 0, maxX: maxX = 1 / 0} = interactiveRange, {x1: x1, x2: x2, y1: y1, y2: y2} = this._operatingMask.globalAABBBounds, minMoveStepX = minX - x1, maxMoveStepX = maxX - x2, minMoveStepY = minY - y1, maxMoveStepY = maxY - y2;
|
|
97
58
|
this._operatingMaskMoveRangeX = [ minMoveStepX, maxMoveStepX ], this._operatingMaskMoveRangeY = [ minMoveStepY, maxMoveStepY ],
|
|
98
|
-
this._operatingMask.setAttribute("pickable", !0), this.
|
|
99
|
-
operateMask: this._operatingMask,
|
|
100
|
-
operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
|
|
101
|
-
event: e
|
|
102
|
-
});
|
|
59
|
+
this._operatingMask.setAttribute("pickable", !0), this._dispatchBrushEvent(type_1.IOperateType.moveStart, e);
|
|
103
60
|
}
|
|
104
61
|
_drawing(e) {
|
|
105
|
-
var _a
|
|
106
|
-
const pos = this.eventPosToStagePos(e), {
|
|
62
|
+
var _a;
|
|
63
|
+
const pos = this.eventPosToStagePos(e), {brushType: brushType} = this.attribute, cacheLength = this._cacheDrawPoints.length;
|
|
107
64
|
if (cacheLength > 0) {
|
|
108
65
|
const lastPos = null !== (_a = this._cacheDrawPoints[this._cacheDrawPoints.length - 1]) && void 0 !== _a ? _a : {};
|
|
109
66
|
if (pos.x === lastPos.x && pos.y === lastPos.y) return;
|
|
110
67
|
}
|
|
111
68
|
"polygon" === brushType || cacheLength <= 1 ? this._cacheDrawPoints.push(pos) : this._cacheDrawPoints[cacheLength - 1] = pos;
|
|
112
69
|
const maskPoints = this._computeMaskPoints();
|
|
113
|
-
this._operatingMask.setAttribute("points", maskPoints);
|
|
114
|
-
const {x1: x1 = 0, x2: x2 = 0, y1: y1 = 0, y2: y2 = 0} = null === (_b = this._operatingMask) || void 0 === _b ? void 0 : _b._AABBBounds;
|
|
115
|
-
this._isDrawedBeforeEnd = !this._operatingMask._AABBBounds.empty() && !!(Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold),
|
|
116
|
-
this._isDrawedBeforeEnd && (this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds,
|
|
117
|
-
this._dispatchEvent(type_1.IOperateType.drawing, {
|
|
118
|
-
operateMask: this._operatingMask,
|
|
119
|
-
operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
|
|
120
|
-
event: e
|
|
121
|
-
}));
|
|
70
|
+
this._operatingMask.setAttribute("points", maskPoints), this._dispatchBrushEvent(type_1.IOperateType.drawing, e);
|
|
122
71
|
}
|
|
123
72
|
_moving(e) {
|
|
124
73
|
const startPos = this._cacheMovePoint, pos = this.eventPosToStagePos(e);
|
|
@@ -128,11 +77,37 @@ class Brush extends base_1.AbstractComponent {
|
|
|
128
77
|
dx: moveX,
|
|
129
78
|
dy: moveY
|
|
130
79
|
}), this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds,
|
|
131
|
-
this.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
80
|
+
this._dispatchBrushEvent(type_1.IOperateType.moving, e);
|
|
81
|
+
}
|
|
82
|
+
_drawEnd(e) {
|
|
83
|
+
const {removeOnClick: removeOnClick = !0, sizeThreshold: sizeThreshold = config_1.DEFAULT_SIZE_THRESHOLD} = this.attribute;
|
|
84
|
+
if (this._outOfInteractiveRange(e)) this._isEmptyMask() || (this._clearMask(), this._dispatchBrushEvent(type_1.IOperateType.brushClear, e)); else {
|
|
85
|
+
const {x: x1, y: y1} = this._startPos, {x: x2, y: y2} = this.eventPosToStagePos(e);
|
|
86
|
+
Math.abs(x2 - x1) <= 1 && Math.abs(y2 - y1) <= 1 && removeOnClick ? this._isEmptyMask() || (this._clearMask(),
|
|
87
|
+
this._dispatchBrushEvent(type_1.IOperateType.brushClear, e)) : Math.abs(x2 - x1) < sizeThreshold && Math.abs(y1 - y2) < sizeThreshold ? (delete this._brushMaskAABBBoundsDict[this._operatingMask.name],
|
|
88
|
+
this._container.setAttributes({}), this._container.removeChild(this._operatingMask),
|
|
89
|
+
this._isEmptyMask() && this._dispatchBrushEvent(type_1.IOperateType.brushClear, e)) : (this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds,
|
|
90
|
+
this._dispatchBrushEvent(type_1.IOperateType.drawEnd, e));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
_moveEnd(e) {
|
|
94
|
+
this._operatingMask && this._operatingMask.setAttribute("pickable", !1), this._dispatchBrushEvent(type_1.IOperateType.moveEnd, e);
|
|
95
|
+
}
|
|
96
|
+
render() {
|
|
97
|
+
this._bindBrushEvents();
|
|
98
|
+
const group = this.createOrUpdateChild("brush-container", {}, "group");
|
|
99
|
+
this._container = group;
|
|
100
|
+
}
|
|
101
|
+
releaseBrushEvents() {
|
|
102
|
+
const {trigger: trigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.trigger, resetTrigger: resetTrigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.resetTrigger} = this.attribute;
|
|
103
|
+
(0, vutils_1.array)(trigger).forEach((t => this.stage.removeEventListener(t, this._onBrushStart))),
|
|
104
|
+
(0, vutils_1.array)(resetTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushClear))),
|
|
105
|
+
this._releaseBrushUpdateEvents();
|
|
106
|
+
}
|
|
107
|
+
_releaseBrushUpdateEvents() {
|
|
108
|
+
const {updateTrigger: updateTrigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger: endTrigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.endTrigger} = this.attribute;
|
|
109
|
+
(0, vutils_1.array)(updateTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushingWithDelay))),
|
|
110
|
+
(0, vutils_1.array)(endTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushEnd)));
|
|
136
111
|
}
|
|
137
112
|
_computeMaskPoints() {
|
|
138
113
|
const {brushType: brushType, xRange: xRange = [ 0, 0 ], yRange: yRange = [ 0, 0 ]} = this.attribute;
|
|
@@ -182,6 +157,18 @@ class Brush extends base_1.AbstractComponent {
|
|
|
182
157
|
brushMask.name = `brush-${Date.now()}`, this._operatingMask = brushMask, this._container.add(brushMask),
|
|
183
158
|
this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;
|
|
184
159
|
}
|
|
160
|
+
_isPosInBrushMask(e) {
|
|
161
|
+
const pos = this.eventPosToStagePos(e), brushMasks = this._container.getChildren();
|
|
162
|
+
for (let i = 0; i < brushMasks.length; i++) {
|
|
163
|
+
const {points: points = [], dx: dx = 0, dy: dy = 0} = brushMasks[i].attribute, pointsConsiderOffset = points.map((point => ({
|
|
164
|
+
x: point.x + dx,
|
|
165
|
+
y: point.y + dy
|
|
166
|
+
})));
|
|
167
|
+
if ((0, vutils_1.polygonContainPoint)(pointsConsiderOffset, pos.x, pos.y)) return this._operatingMask = brushMasks[i],
|
|
168
|
+
!0;
|
|
169
|
+
}
|
|
170
|
+
return !1;
|
|
171
|
+
}
|
|
185
172
|
_outOfInteractiveRange(e) {
|
|
186
173
|
const {interactiveRange: interactiveRange} = this.attribute, {minY: minY = -1 / 0, maxY: maxY = 1 / 0, minX: minX = -1 / 0, maxX: maxX = 1 / 0} = interactiveRange, pos = this.eventPosToStagePos(e);
|
|
187
174
|
return pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY;
|
|
@@ -189,17 +176,18 @@ class Brush extends base_1.AbstractComponent {
|
|
|
189
176
|
eventPosToStagePos(e) {
|
|
190
177
|
return this.stage.eventPointTransform(e);
|
|
191
178
|
}
|
|
192
|
-
|
|
193
|
-
this.
|
|
194
|
-
|
|
195
|
-
|
|
179
|
+
_dispatchBrushEvent(operateType, e) {
|
|
180
|
+
this._dispatchEvent(operateType, {
|
|
181
|
+
operateMask: this._operatingMask,
|
|
182
|
+
operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,
|
|
183
|
+
event: e
|
|
184
|
+
});
|
|
196
185
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
(0, vutils_1.
|
|
202
|
-
(0, vutils_1.array)(resetTrigger).forEach((t => this.stage.removeEventListener(t, this._onBrushClear)));
|
|
186
|
+
_clearMask() {
|
|
187
|
+
this._brushMaskAABBBoundsDict = {}, this._container.incrementalClearChild(), this._operatingMask = null;
|
|
188
|
+
}
|
|
189
|
+
_isEmptyMask() {
|
|
190
|
+
return (0, vutils_1.isEmpty)(this._brushMaskAABBBoundsDict) || Object.keys(this._brushMaskAABBBoundsDict).every((key => this._brushMaskAABBBoundsDict[key].empty()));
|
|
203
191
|
}
|
|
204
192
|
}
|
|
205
193
|
|
package/cjs/brush/brush.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brush/brush.ts"],"names":[],"mappings":"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","file":"brush.js","sourcesContent":["/**\n * @description 框选组件\n */\nimport type { FederatedPointerEvent, IGroup, IPolygon } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator, vglobal } from '@visactor/vrender-core';\nimport type { IBounds, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, cloneDeep, debounce, merge, polygonContainPoint, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BrushAttributes } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IOperateType } from './type';\nimport { DEFAULT_BRUSH_ATTRIBUTES, DEFAULT_SIZE_THRESHOLD } from './config';\nimport type { ComponentOptions } from '../interface';\nimport { loadBrushComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadBrushComponent();\nexport class Brush extends AbstractComponent<Required<BrushAttributes>> {\n name = 'brush';\n static defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;\n\n private _container!: IGroup;\n\n // 绘制mask时的相关属性\n private _activeDrawState = false; // 用于标记绘制状态\n private _cacheDrawPoints: IPointLike[] = []; // 用于维护鼠标走过的路径,主要用于绘制mask的点\n private _isDrawedBeforeEnd = false;\n private _isDownBeforeUpOutside = false; // 用于标记出画布外单击事件,以便清空\n // 移动mask时的相关属性\n private _activeMoveState = false; // 用于标记移动状态\n private _operatingMaskMoveDx = 0; // 用于标记移动的位移量\n private _operatingMaskMoveDy = 0;\n private _operatingMaskMoveRangeX: [number, number] = [-Infinity, Infinity];\n private _operatingMaskMoveRangeY: [number, number] = [-Infinity, Infinity];\n private _cacheMovePoint!: IPointLike; // 用于维护鼠标所在位置,主要用于计算位移量\n\n private _operatingMask!: IPolygon; // 用于标记正在绘制的mask 或 正在移动的mask\n\n // 透出给上层的属性(主要是所有mask的AABBBounds,这里用的是dict存储方便添加和修改)\n private _brushMaskAABBBoundsDict: { [name: string]: IBounds } = {};\n\n constructor(attributes: BrushAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Brush.defaultAttributes, attributes));\n }\n\n private _bindBrushEvents(): void {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const {\n trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger,\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger\n } = this.attribute as BrushAttributes;\n // 拖拽绘制开始\n array(trigger).forEach(t => vglobal.addEventListener(t, this._onBrushStart as EventListener));\n\n // 拖拽绘制时\n array(updateTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushingWithDelay as EventListener));\n // 拖拽绘制结束\n array(endTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushEnd as EventListener));\n array(resetTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushClear as EventListener));\n }\n\n private _isPosInBrushMask(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const brushMasks = this._container.getChildren();\n for (let i = 0; i < brushMasks.length; i++) {\n const { points = [], dx = 0, dy = 0 } = (brushMasks[i] as IPolygon).attribute;\n const pointsConsiderOffset: IPointLike[] = points.map((point: IPointLike) => {\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n });\n if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {\n this._operatingMask = brushMasks[i] as IPolygon;\n return true;\n }\n }\n return false;\n }\n\n /**\n * 开始绘制 或 移动\n * @description\n * 1. 判断状态: 如果在brushMask中,则属于移动状态; 否则属于绘制状态\n *(移动状态和绘制状态互斥, 且移动状态考虑brushMoved配置, 如果在brush点内但brushMoved为false, 则走绘制状态, 而非两个状态都不响应, 此效果与echarts保持一致)\n * 2. 判断坐标是否在有效交互范围内\n * 2. 如果是移动状态: 标记移动状态 & 标记正在移动的mask & 初始化mask的dx和dy\n * 3. 如果是绘制状态: 标记绘制状态 & 标记正在绘制的mask & 清除之前的mask & 添加新的mask\n */\n private _onBrushStart = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n this._isDownBeforeUpOutside = true;\n return;\n }\n e.stopPropagation();\n\n const brushMoved = this.attribute.brushMoved ?? true;\n this._activeMoveState = brushMoved && this._isPosInBrushMask(e); // 如果是移动状态,在这里会标记operatingMask为正在移动的mask\n this._activeDrawState = !this._activeMoveState;\n\n this._activeDrawState && this._initDraw(e); // 如果是绘制状态,在这里会标记operatingMask为正在绘制的mask\n this._activeMoveState && this._initMove(e);\n };\n\n /**\n * 绘制 或 移动 中\n * @description\n * 1. 如果是绘制状态: 更新_cacheDrawPoints 和 mask的points属性\n * 2. 如果是移动状态: 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _onBrushing = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n\n if (this._activeDrawState || this._activeMoveState) {\n e.stopPropagation();\n }\n\n this._activeDrawState && this._drawing(e); // 如果是绘制状态,在这里会标记operatingMask为正在绘制的mask\n this._activeMoveState && this._moving(e);\n };\n\n private _onBrushingWithDelay =\n this.attribute.delayTime === 0\n ? this._onBrushing\n : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime);\n\n /**\n * 结束绘制 和 移动\n * @description 取消绘制 和 移动 状态\n */\n private _onBrushEnd = (e: FederatedPointerEvent) => {\n if (!this._activeDrawState && !this._activeMoveState) {\n return;\n }\n\n e.preventDefault();\n const { removeOnClick = true } = this.attribute as BrushAttributes;\n if (this._activeDrawState && !this._isDrawedBeforeEnd && removeOnClick) {\n // _isDrawedBeforeEnd有两种情况:\n // 1. 没有绘制mask\n // 2. 绘制了mask但没有超过阈值\n // 只有第2种情况才会触发clear, 可以理解为双击才触发clear\n if (this._operatingMask?._AABBBounds.empty()) {\n this._dispatchEvent(IOperateType.brushClear, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n this._container.incrementalClearChild();\n this._brushMaskAABBBoundsDict = {};\n } else {\n if (this._activeDrawState) {\n this._dispatchEvent(IOperateType.drawEnd, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n if (this._activeMoveState) {\n this._dispatchEvent(IOperateType.moveEnd, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n }\n\n this._activeDrawState = false;\n this._activeMoveState = false;\n this._isDrawedBeforeEnd = false;\n if (this._operatingMask) {\n this._operatingMask.setAttribute('pickable', false);\n }\n };\n\n private _onBrushClear = (e: FederatedPointerEvent) => {\n e.preventDefault();\n const { removeOnClick = true } = this.attribute as BrushAttributes;\n if (this._isDownBeforeUpOutside && removeOnClick) {\n this._dispatchEvent(IOperateType.brushClear, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n this._container.incrementalClearChild();\n this._brushMaskAABBBoundsDict = {};\n }\n\n this._activeDrawState = false;\n this._activeMoveState = false;\n this._isDrawedBeforeEnd = false;\n this._isDownBeforeUpOutside = false;\n if (this._operatingMask) {\n this._operatingMask.setAttribute('pickable', false);\n }\n };\n\n /**\n * 初始化绘制状态\n * @description 清除之前的mask & 添加新的mask\n */\n private _initDraw(e: FederatedPointerEvent) {\n const { brushMode } = this.attribute as BrushAttributes;\n const pos = this.eventPosToStagePos(e);\n this._cacheDrawPoints = [pos];\n this._isDrawedBeforeEnd = false;\n if (brushMode === 'single') {\n this._brushMaskAABBBoundsDict = {};\n this._container.incrementalClearChild();\n }\n this._addBrushMask();\n this._dispatchEvent(IOperateType.drawStart, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 初始化移动状态\n * @description 初始化mask的dx和dy\n */\n private _initMove(e: FederatedPointerEvent) {\n this._cacheMovePoint = this.eventPosToStagePos(e);\n\n this._operatingMaskMoveDx = this._operatingMask.attribute.dx ?? 0;\n this._operatingMaskMoveDy = this._operatingMask.attribute.dy ?? 0;\n\n // 计算最大移动范围, 为了将brushMask限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n\n const { x1, x2, y1, y2 } = this._operatingMask.globalAABBBounds;\n const minMoveStepX = minX - x1;\n const maxMoveStepX = maxX - x2;\n const minMoveStepY = minY - y1;\n const maxMoveStepY = maxY - y2;\n\n this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];\n this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];\n\n this._operatingMask.setAttribute('pickable', true);\n this._dispatchEvent(IOperateType.moveStart, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 绘制中\n * @description 更新_cacheDrawPoints 和 mask的points属性\n */\n private _drawing(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const { sizeThreshold = DEFAULT_SIZE_THRESHOLD, brushType } = this.attribute as BrushAttributes;\n\n const cacheLength = this._cacheDrawPoints.length;\n\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (cacheLength > 0) {\n const lastPos = this._cacheDrawPoints[this._cacheDrawPoints.length - 1] ?? ({} as IPointLike);\n if (pos.x === lastPos.x && pos.y === lastPos.y) {\n return;\n }\n }\n // 更新交互位置\n if (brushType === 'polygon' || cacheLength <= 1) {\n this._cacheDrawPoints.push(pos);\n } else {\n this._cacheDrawPoints[cacheLength - 1] = pos;\n }\n // 更新mask形状\n const maskPoints = this._computeMaskPoints();\n this._operatingMask.setAttribute('points', maskPoints);\n\n // 更新形状之后再判断是否需要正在绘制\n // if not, 则_isDrawedBeforeEnd false\n // then: 1. 不暴露drawing状态 2. 在brushEnd时该形状会被清空\n const { x1 = 0, x2 = 0, y1 = 0, y2 = 0 } = this._operatingMask?._AABBBounds;\n this._isDrawedBeforeEnd =\n !this._operatingMask._AABBBounds.empty() &&\n !!(Math.abs(x2 - x1) > sizeThreshold || Math.abs(y1 - y2) > sizeThreshold);\n if (this._isDrawedBeforeEnd) {\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchEvent(IOperateType.drawing, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n }\n\n /**\n * 移动中\n * @description 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _moving(e: FederatedPointerEvent) {\n const startPos = this._cacheMovePoint;\n const pos = this.eventPosToStagePos(e);\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (pos.x === startPos?.x && pos.y === startPos?.y) {\n return;\n }\n\n const moveStepX = pos.x - startPos.x;\n const moveStepY = pos.y - startPos.y;\n const moveX =\n Math.min(this._operatingMaskMoveRangeX[1], Math.max(this._operatingMaskMoveRangeX[0], moveStepX)) +\n this._operatingMaskMoveDx;\n const moveY =\n Math.min(this._operatingMaskMoveRangeY[1], Math.max(this._operatingMaskMoveRangeY[0], moveStepY)) +\n this._operatingMaskMoveDy;\n\n this._operatingMask.setAttributes({\n dx: moveX,\n dy: moveY\n });\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchEvent(IOperateType.moving, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 构造brushMask的points属性\n * @description 根据不同的brushType从_cacheDrawPoints中取points\n * 1. 'rect': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点\n * 2. 'x': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的x坐标\n * 3. 'y': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的y坐标\n * 4. 'polygon': 取鼠标轨迹_cacheDrawPoints的所有点\n */\n private _computeMaskPoints() {\n const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute as BrushAttributes;\n let maskPoints: IPointLike[] = [];\n const startPoint = this._cacheDrawPoints[0];\n const endPoint = this._cacheDrawPoints[this._cacheDrawPoints.length - 1];\n\n if (brushType === 'rect') {\n maskPoints = [\n startPoint,\n {\n x: endPoint.x,\n y: startPoint.y\n },\n endPoint,\n {\n x: startPoint.x,\n y: endPoint.y\n }\n ];\n } else if (brushType === 'x') {\n maskPoints = [\n {\n x: startPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[1]\n },\n {\n x: startPoint.x,\n y: yRange[1]\n }\n ];\n } else if (brushType === 'y') {\n maskPoints = [\n {\n x: xRange[0],\n y: startPoint.y\n },\n {\n x: xRange[0],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: startPoint.y\n }\n ];\n } else {\n maskPoints = cloneDeep(this._cacheDrawPoints); // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n }\n return maskPoints;\n }\n\n private _addBrushMask() {\n const { brushStyle, hasMask } = this.attribute as BrushAttributes;\n const brushMask = graphicCreator.polygon({\n points: cloneDeep(this._cacheDrawPoints), // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n cursor: 'move',\n pickable: false,\n ...brushStyle,\n opacity: hasMask ? brushStyle.opacity ?? 1 : 0\n });\n brushMask.name = `brush-${Date.now()}`; // 用Date给mask唯一标记\n this._operatingMask = brushMask;\n this._container.add(brushMask);\n this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;\n }\n\n private _outOfInteractiveRange(e: FederatedPointerEvent) {\n // 在返回坐标时,将其限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n const pos = this.eventPosToStagePos(e);\n if (pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY) {\n return true;\n }\n return false;\n }\n\n /** 事件系统坐标转换为stage坐标 */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n return this.stage.eventPointTransform(e);\n }\n\n protected render() {\n this._bindBrushEvents();\n const group = this.createOrUpdateChild('brush-container', {}, 'group') as unknown as IGroup;\n this._container = group;\n }\n\n releaseBrushEvents(): void {\n const {\n delayType = 'throttle',\n delayTime = 0,\n trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger,\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger\n } = this.attribute as BrushAttributes;\n array(trigger).forEach(t => vglobal.removeEventListener(t, this._onBrushStart as EventListener));\n array(updateTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushingWithDelay as EventListener));\n array(endTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushEnd as EventListener));\n array(resetTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushClear as EventListener));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/brush/brush.ts"],"names":[],"mappings":"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","file":"brush.js","sourcesContent":["/**\n * @description 框选组件\n */\nimport type { FederatedPointerEvent, IGroup, IPolygon } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { graphicCreator } from '@visactor/vrender-core';\nimport type { IBounds, IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, cloneDeep, debounce, isEmpty, merge, polygonContainPoint, throttle } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { BrushAttributes } from './type';\n// eslint-disable-next-line no-duplicate-imports\nimport { IOperateType } from './type';\nimport { DEFAULT_BRUSH_ATTRIBUTES, DEFAULT_SIZE_THRESHOLD } from './config';\nimport type { ComponentOptions } from '../interface';\nimport { loadBrushComponent } from './register';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nloadBrushComponent();\nexport class Brush extends AbstractComponent<Required<BrushAttributes>> {\n name = 'brush';\n static defaultAttributes = DEFAULT_BRUSH_ATTRIBUTES;\n\n private _container!: IGroup;\n\n // 绘制mask时的相关属性\n private _activeDrawState = false; // 用于标记绘制状态\n private _cacheDrawPoints: IPointLike[] = []; // 用于维护鼠标走过的路径,主要用于绘制mask的点\n // 移动mask时的相关属性\n private _activeMoveState = false; // 用于标记移动状态\n private _operatingMaskMoveDx = 0; // 用于标记移动的位移量\n private _operatingMaskMoveDy = 0;\n private _operatingMaskMoveRangeX: [number, number] = [-Infinity, Infinity];\n private _operatingMaskMoveRangeY: [number, number] = [-Infinity, Infinity];\n private _cacheMovePoint!: IPointLike; // 用于维护鼠标所在位置,主要用于计算位移量\n\n private _operatingMask!: IPolygon; // 用于标记正在绘制的mask 或 正在移动的mask\n\n // 透出给上层的属性(主要是所有mask的AABBBounds,这里用的是dict存储方便添加和修改)\n private _brushMaskAABBBoundsDict: { [name: string]: IBounds } = {};\n\n private _firstUpdate = true; // 用于标记第一次更新\n private _startPos!: IPointLike; // 用于标记开始绘制的位置\n\n constructor(attributes: BrushAttributes, options?: ComponentOptions) {\n super(options?.skipDefault ? attributes : merge({}, Brush.defaultAttributes, attributes));\n }\n\n private _bindBrushEvents(): void {\n // 绑定前先解绑, 确保事件不会重复绑定\n this.releaseBrushEvents();\n if (this.attribute.disableTriggerEvent) {\n return;\n }\n const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this\n .attribute as BrushAttributes;\n array(trigger).forEach(t => this.stage.addEventListener(t, this._onBrushStart as EventListener));\n array(resetTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushClear as EventListener));\n }\n\n /**\n * 开始绘制 或 移动\n * @description\n * 1. 判断状态: 如果在brushMask中,则属于移动状态; 否则属于绘制状态\n *(移动状态和绘制状态互斥, 且移动状态考虑brushMoved配置, 如果在brush点内但brushMoved为false, 则走绘制状态, 而非两个状态都不响应, 此效果与echarts保持一致)\n * 2. 判断坐标是否在有效交互范围内\n * 2. 如果是移动状态: 标记移动状态 & 标记正在移动的mask & 初始化mask的dx和dy\n * 3. 如果是绘制状态: 标记绘制状态 & 标记正在绘制的mask & 清除之前的mask & 添加新的mask\n */\n private _onBrushStart = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n return;\n }\n const {\n updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger,\n endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger,\n brushMoved = true\n } = this.attribute as BrushAttributes;\n array(updateTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushingWithDelay as EventListener));\n array(endTrigger).forEach(t => this.stage.addEventListener(t, this._onBrushEnd as EventListener));\n\n e.stopPropagation();\n this._firstUpdate = true;\n this._activeMoveState = brushMoved && this._isPosInBrushMask(e); // 如果是移动状态,在这里会标记operatingMask为正在移动的mask\n this._activeDrawState = !this._activeMoveState;\n this._startPos = this.eventPosToStagePos(e);\n this._cacheDrawPoints = [this._startPos];\n };\n\n /**\n * 绘制 或 移动 中\n * @description\n * 1. 如果是绘制状态: 更新_cacheDrawPoints 和 mask的points属性\n * 2. 如果是移动状态: 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _onBrushing = (e: FederatedPointerEvent) => {\n if (this._outOfInteractiveRange(e)) {\n return;\n }\n e.stopPropagation();\n if (this._firstUpdate) {\n this._activeDrawState && this._initDraw(e);\n this._activeMoveState && this._initMove(e);\n this._firstUpdate = false;\n } else {\n this._activeDrawState && this._drawing(e);\n this._activeMoveState && this._moving(e);\n }\n };\n\n private _onBrushingWithDelay =\n this.attribute.delayTime === 0\n ? this._onBrushing\n : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime);\n\n /**\n * 结束绘制 和 移动\n * @description 取消绘制 和 移动 状态\n */\n private _onBrushEnd = (e: FederatedPointerEvent) => {\n this._releaseBrushUpdateEvents();\n e.preventDefault();\n this._activeDrawState && this._drawEnd(e);\n this._activeMoveState && this._moveEnd(e);\n\n this._activeDrawState = false;\n this._activeMoveState = false;\n };\n\n private _onBrushClear = (e: FederatedPointerEvent) => {\n e.preventDefault();\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n this._activeDrawState = false;\n this._activeMoveState = false;\n };\n\n /**\n * 初始化绘制状态\n * @description 清除之前的mask & 添加新的mask\n */\n private _initDraw(e: FederatedPointerEvent) {\n const { brushMode } = this.attribute as BrushAttributes;\n const pos = this.eventPosToStagePos(e);\n\n this._cacheDrawPoints.push(pos);\n brushMode === 'single' && this._clearMask();\n this._addBrushMask();\n this._dispatchBrushEvent(IOperateType.drawStart, e);\n // 无论是多选,还是单选\n // 如果这是第一个brush mask\n // 证明这第一次绘制, 则触发brushActive事件\n if (Object.keys(this._brushMaskAABBBoundsDict).length === 1) {\n this._dispatchBrushEvent(IOperateType.brushActive, e);\n }\n }\n\n /**\n * 初始化移动状态\n * @description 初始化mask的dx和dy\n */\n private _initMove(e: FederatedPointerEvent) {\n this._cacheMovePoint = this.eventPosToStagePos(e);\n\n this._operatingMaskMoveDx = this._operatingMask.attribute.dx ?? 0;\n this._operatingMaskMoveDy = this._operatingMask.attribute.dy ?? 0;\n\n // 计算最大移动范围, 为了将brushMask限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n\n const { x1, x2, y1, y2 } = this._operatingMask.globalAABBBounds;\n const minMoveStepX = minX - x1;\n const maxMoveStepX = maxX - x2;\n const minMoveStepY = minY - y1;\n const maxMoveStepY = maxY - y2;\n\n this._operatingMaskMoveRangeX = [minMoveStepX, maxMoveStepX];\n this._operatingMaskMoveRangeY = [minMoveStepY, maxMoveStepY];\n\n this._operatingMask.setAttribute('pickable', true);\n this._dispatchBrushEvent(IOperateType.moveStart, e);\n }\n\n /**\n * 绘制中\n * @description 更新_cacheDrawPoints 和 mask的points属性\n */\n private _drawing(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const { brushType } = this.attribute as BrushAttributes;\n\n const cacheLength = this._cacheDrawPoints.length;\n\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (cacheLength > 0) {\n const lastPos = this._cacheDrawPoints[this._cacheDrawPoints.length - 1] ?? ({} as IPointLike);\n if (pos.x === lastPos.x && pos.y === lastPos.y) {\n return;\n }\n }\n // 更新交互位置\n if (brushType === 'polygon' || cacheLength <= 1) {\n this._cacheDrawPoints.push(pos);\n } else {\n this._cacheDrawPoints[cacheLength - 1] = pos;\n }\n // 更新mask形状\n const maskPoints = this._computeMaskPoints();\n this._operatingMask.setAttribute('points', maskPoints);\n this._dispatchBrushEvent(IOperateType.drawing, e);\n }\n\n /**\n * 移动中\n * @description 标记移动状态 & 计算位移量 & 给被移动的mask偏移属性\n */\n private _moving(e: FederatedPointerEvent) {\n const startPos = this._cacheMovePoint;\n const pos = this.eventPosToStagePos(e);\n // 如果当前点的位置和上一次点的位置一致,则无需更新\n if (pos.x === startPos?.x && pos.y === startPos?.y) {\n return;\n }\n\n const moveStepX = pos.x - startPos.x;\n const moveStepY = pos.y - startPos.y;\n const moveX =\n Math.min(this._operatingMaskMoveRangeX[1], Math.max(this._operatingMaskMoveRangeX[0], moveStepX)) +\n this._operatingMaskMoveDx;\n const moveY =\n Math.min(this._operatingMaskMoveRangeY[1], Math.max(this._operatingMaskMoveRangeY[0], moveStepY)) +\n this._operatingMaskMoveDy;\n\n this._operatingMask.setAttributes({\n dx: moveX,\n dy: moveY\n });\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchBrushEvent(IOperateType.moving, e);\n }\n\n private _drawEnd(e: FederatedPointerEvent) {\n const { removeOnClick = true, sizeThreshold = DEFAULT_SIZE_THRESHOLD } = this.attribute as BrushAttributes;\n if (this._outOfInteractiveRange(e)) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n } else {\n const { x: x1, y: y1 } = this._startPos;\n const { x: x2, y: y2 } = this.eventPosToStagePos(e);\n // 1. 无效绘制: 单击\n if (Math.abs(x2 - x1) <= 1 && Math.abs(y2 - y1) <= 1 && removeOnClick) {\n if (!this._isEmptyMask()) {\n this._clearMask();\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n }\n }\n // 2. 无效绘制: 绘制了mask但没有超过阈值, 仅清空当前操作的mask\n else if (Math.abs(x2 - x1) < sizeThreshold && Math.abs(y1 - y2) < sizeThreshold) {\n delete this._brushMaskAABBBoundsDict[this._operatingMask.name];\n this._container.setAttributes({}); // hack逻辑, 待优化: removeChild后, vrender 无法 autoRender, setAttr手动触发render\n this._container.removeChild(this._operatingMask);\n if (this._isEmptyMask()) {\n // 说明是最后一个mask被清空了, 要抛出clear事件, 重置图元状态\n this._dispatchBrushEvent(IOperateType.brushClear, e);\n } else {\n // 说明还有其他mask, 这次无效绘制不会重置状态\n // do nothing\n }\n }\n // 3. 有效绘制\n else {\n this._brushMaskAABBBoundsDict[this._operatingMask.name] = this._operatingMask.AABBBounds;\n this._dispatchBrushEvent(IOperateType.drawEnd, e);\n }\n }\n }\n\n private _moveEnd(e: FederatedPointerEvent) {\n if (this._operatingMask) {\n this._operatingMask.setAttribute('pickable', false);\n }\n this._dispatchBrushEvent(IOperateType.moveEnd, e);\n }\n\n protected render() {\n this._bindBrushEvents();\n const group = this.createOrUpdateChild('brush-container', {}, 'group') as unknown as IGroup;\n this._container = group;\n }\n\n releaseBrushEvents(): void {\n const { trigger = DEFAULT_BRUSH_ATTRIBUTES.trigger, resetTrigger = DEFAULT_BRUSH_ATTRIBUTES.resetTrigger } = this\n .attribute as BrushAttributes;\n array(trigger).forEach(t => this.stage.removeEventListener(t, this._onBrushStart as EventListener));\n array(resetTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushClear as EventListener));\n this._releaseBrushUpdateEvents();\n }\n\n private _releaseBrushUpdateEvents(): void {\n const { updateTrigger = DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger = DEFAULT_BRUSH_ATTRIBUTES.endTrigger } =\n this.attribute as BrushAttributes;\n array(updateTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushingWithDelay as EventListener));\n array(endTrigger).forEach(t => this.stage.removeEventListener(t, this._onBrushEnd as EventListener));\n }\n\n /**\n * 构造brushMask的points属性\n * @description 根据不同的brushType从_cacheDrawPoints中取points\n * 1. 'rect': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点\n * 2. 'x': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的x坐标\n * 3. 'y': 只取鼠标轨迹_cacheDrawPoints的第一个点和最后一个点的y坐标\n * 4. 'polygon': 取鼠标轨迹_cacheDrawPoints的所有点\n */\n private _computeMaskPoints() {\n const { brushType, xRange = [0, 0], yRange = [0, 0] } = this.attribute as BrushAttributes;\n let maskPoints: IPointLike[] = [];\n const startPoint = this._cacheDrawPoints[0];\n const endPoint = this._cacheDrawPoints[this._cacheDrawPoints.length - 1];\n\n if (brushType === 'rect') {\n maskPoints = [\n startPoint,\n {\n x: endPoint.x,\n y: startPoint.y\n },\n endPoint,\n {\n x: startPoint.x,\n y: endPoint.y\n }\n ];\n } else if (brushType === 'x') {\n maskPoints = [\n {\n x: startPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[0]\n },\n {\n x: endPoint.x,\n y: yRange[1]\n },\n {\n x: startPoint.x,\n y: yRange[1]\n }\n ];\n } else if (brushType === 'y') {\n maskPoints = [\n {\n x: xRange[0],\n y: startPoint.y\n },\n {\n x: xRange[0],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: endPoint.y\n },\n {\n x: xRange[1],\n y: startPoint.y\n }\n ];\n } else {\n maskPoints = cloneDeep(this._cacheDrawPoints); // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n }\n return maskPoints;\n }\n\n /**\n * 添加brushMask\n */\n private _addBrushMask() {\n const { brushStyle, hasMask } = this.attribute as BrushAttributes;\n const brushMask = graphicCreator.polygon({\n points: cloneDeep(this._cacheDrawPoints), // _cacheDrawPoints在不断更新,所以这里需要cloneDeep\n cursor: 'move',\n pickable: false,\n ...brushStyle,\n opacity: hasMask ? (brushStyle.opacity ?? 1) : 0\n });\n brushMask.name = `brush-${Date.now()}`; // 用Date给mask唯一标记\n this._operatingMask = brushMask;\n this._container.add(brushMask);\n this._brushMaskAABBBoundsDict[brushMask.name] = brushMask.AABBBounds;\n }\n\n /**\n * 遍历_container的所有子元素,判断鼠标是否在子元素的范围内\n */\n private _isPosInBrushMask(e: FederatedPointerEvent) {\n const pos = this.eventPosToStagePos(e);\n const brushMasks = this._container.getChildren();\n for (let i = 0; i < brushMasks.length; i++) {\n const { points = [], dx = 0, dy = 0 } = (brushMasks[i] as IPolygon).attribute;\n const pointsConsiderOffset: IPointLike[] = points.map((point: IPointLike) => {\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n });\n if (polygonContainPoint(pointsConsiderOffset, pos.x, pos.y)) {\n this._operatingMask = brushMasks[i] as IPolygon;\n return true;\n }\n }\n return false;\n }\n\n /**\n * 判断鼠标是否在交互范围内\n */\n private _outOfInteractiveRange(e: FederatedPointerEvent) {\n // 在返回坐标时,将其限制在交互范围内\n const { interactiveRange } = this.attribute as BrushAttributes;\n const { minY = -Infinity, maxY = Infinity, minX = -Infinity, maxX = Infinity } = interactiveRange;\n const pos = this.eventPosToStagePos(e);\n if (pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY) {\n return true;\n }\n return false;\n }\n\n /**\n * 事件系统坐标转换为stage坐标\n */\n protected eventPosToStagePos(e: FederatedPointerEvent) {\n return this.stage.eventPointTransform(e);\n }\n\n /**\n * 根据操作类型触发对应的事件\n */\n private _dispatchBrushEvent(operateType: IOperateType, e: any) {\n this._dispatchEvent(operateType, {\n operateMask: this._operatingMask as any,\n operatedMaskAABBBounds: this._brushMaskAABBBoundsDict,\n event: e\n });\n }\n\n /**\n * 重置brush状态\n */\n private _clearMask() {\n this._brushMaskAABBBoundsDict = {};\n this._container.incrementalClearChild();\n this._operatingMask = null;\n }\n\n /**\n * 判断当前画布中,是否存在有效mask\n */\n private _isEmptyMask() {\n return (\n isEmpty(this._brushMaskAABBBoundsDict) ||\n Object.keys(this._brushMaskAABBBoundsDict).every(key => this._brushMaskAABBBoundsDict[key].empty())\n );\n }\n}\n"]}
|
package/cjs/brush/config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const DEFAULT_BRUSH_ATTRIBUTES: {
|
|
2
2
|
trigger: string;
|
|
3
3
|
updateTrigger: string;
|
|
4
|
-
endTrigger: string;
|
|
4
|
+
endTrigger: string[];
|
|
5
5
|
resetTrigger: string;
|
|
6
6
|
hasMask: boolean;
|
|
7
7
|
brushMode: string;
|
|
@@ -17,10 +17,10 @@ export declare const DEFAULT_BRUSH_ATTRIBUTES: {
|
|
|
17
17
|
delayType: string;
|
|
18
18
|
delayTime: number;
|
|
19
19
|
interactiveRange: {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
minY: number;
|
|
21
|
+
maxY: number;
|
|
22
|
+
minX: number;
|
|
23
|
+
maxX: number;
|
|
24
24
|
};
|
|
25
25
|
};
|
|
26
26
|
export declare const DEFAULT_SIZE_THRESHOLD = 5;
|
package/cjs/brush/config.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.DEFAULT_BRUSH_ATTRIBUTES = {
|
|
7
7
|
trigger: "pointerdown",
|
|
8
8
|
updateTrigger: "pointermove",
|
|
9
|
-
endTrigger: "pointerup",
|
|
9
|
+
endTrigger: [ "pointerup", "pointerleave" ],
|
|
10
10
|
resetTrigger: "pointerupoutside",
|
|
11
11
|
hasMask: !0,
|
|
12
12
|
brushMode: "single",
|
|
@@ -22,9 +22,9 @@ exports.DEFAULT_BRUSH_ATTRIBUTES = {
|
|
|
22
22
|
delayType: "throttle",
|
|
23
23
|
delayTime: 10,
|
|
24
24
|
interactiveRange: {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
minY: -1 / 0,
|
|
26
|
+
maxY: 1 / 0,
|
|
27
|
+
minX: -1 / 0,
|
|
28
|
+
maxX: 1 / 0
|
|
29
29
|
}
|
|
30
30
|
}, exports.DEFAULT_SIZE_THRESHOLD = 5;
|
package/cjs/brush/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brush/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,wBAAwB,GAAG;IACtC,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,aAAa;IAC5B,UAAU,EAAE,WAAW;
|
|
1
|
+
{"version":3,"sources":["../src/brush/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,wBAAwB,GAAG;IACtC,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,aAAa;IAC5B,UAAU,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;IACzC,YAAY,EAAE,kBAAkB;IAChC,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,GAAG;QAChB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,CAAC;KACf;IACD,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,EAAE;IACb,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,QAAQ;QACf,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,CAAC,QAAQ;QACf,IAAI,EAAE,QAAQ;KACf;CACF,CAAC;AAEW,QAAA,sBAAsB,GAAG,CAAC,CAAC","file":"config.js","sourcesContent":["export const DEFAULT_BRUSH_ATTRIBUTES = {\n trigger: 'pointerdown',\n updateTrigger: 'pointermove',\n endTrigger: ['pointerup', 'pointerleave'],\n resetTrigger: 'pointerupoutside',\n hasMask: true,\n brushMode: 'single',\n brushType: 'rect',\n brushStyle: {\n fill: '#B0C8F9',\n fillOpacity: 0.2,\n stroke: '#B0C8F9',\n strokeWidth: 2\n },\n brushMoved: true,\n removeOnClick: true,\n delayType: 'throttle',\n delayTime: 10,\n interactiveRange: {\n minY: -Infinity,\n maxY: Infinity,\n minX: -Infinity,\n maxX: Infinity\n }\n};\n\nexport const DEFAULT_SIZE_THRESHOLD = 5;\n"]}
|
package/cjs/brush/type.d.ts
CHANGED
package/cjs/brush/type.js
CHANGED
|
@@ -7,6 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
}), exports.IOperateType = void 0, function(IOperateType) {
|
|
8
8
|
IOperateType.drawStart = "drawStart", IOperateType.drawEnd = "drawEnd", IOperateType.drawing = "drawing",
|
|
9
9
|
IOperateType.moving = "moving", IOperateType.moveStart = "moveStart", IOperateType.moveEnd = "moveEnd",
|
|
10
|
-
IOperateType.brushClear = "brushClear";
|
|
10
|
+
IOperateType.brushActive = "brushActive", IOperateType.brushClear = "brushClear";
|
|
11
11
|
}(IOperateType = exports.IOperateType || (exports.IOperateType = {}));
|
|
12
12
|
//# sourceMappingURL=type.js.map
|
package/cjs/brush/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/brush/type.ts"],"names":[],"mappings":";;;AAyFA,IAAY,
|
|
1
|
+
{"version":3,"sources":["../src/brush/type.ts"],"names":[],"mappings":";;;AAyFA,IAAY,YASX;AATD,WAAY,YAAY;IACtB,uCAAuB,CAAA;IACvB,mCAAmB,CAAA;IACnB,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;IACjB,uCAAuB,CAAA;IACvB,mCAAmB,CAAA;IACnB,2CAA2B,CAAA;IAC3B,yCAAyB,CAAA;AAC3B,CAAC,EATW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QASvB","file":"type.js","sourcesContent":["import type { GraphicEventType, IGroupGraphicAttribute, IPolygonGraphicAttribute } from '@visactor/vrender-core';\nimport type { IDelayType } from '../interface';\n\nexport interface BrushAttributes extends IGroupGraphicAttribute {\n /**\n * 触发框选的事件名称\n */\n trigger?: GraphicEventType | GraphicEventType[];\n /**\n * 更新框选的事件名称\n */\n updateTrigger?: GraphicEventType | GraphicEventType[];\n /**\n * 结束框选的事件名称\n */\n endTrigger?: GraphicEventType | GraphicEventType[];\n /**\n * 清空框选的事件名称\n */\n resetTrigger?: GraphicEventType | GraphicEventType[];\n /**\n * 可交互范围\n */\n interactiveRange?: {\n minX: number;\n maxX: number;\n minY: number;\n maxY: number;\n };\n /**\n * 框选模式\n * @default 'single'\n */\n brushMode?: IBrushMode;\n /**\n * 框选类型\n * @default 'rect'\n */\n brushType?: IBrushType;\n /**\n * brushType为'y'时, x的左右边界位置, 不配置的话不会生效\n * @default [0,0]\n */\n xRange?: [number, number];\n /**\n * brushType为'x'时, y的左右边界位置, 不配置的话不会生效\n * @default [0,0]\n */\n yRange?: [number, number];\n /** 是否展示brush mask */\n hasMask?: boolean;\n /**\n * 框选区域的样式\n */\n brushStyle?: IPolygonGraphicAttribute;\n /**\n * 是否可被平移\n * @default true\n */\n brushMoved?: boolean;\n /**\n * 是否单击空白处, 清除选框\n * @default true\n */\n removeOnClick?: boolean;\n /**\n * brush选框的大小阈值\n */\n sizeThreshold?: number;\n /**\n * 事件触发延迟类型\n * @default 'throttle'\n */\n delayType?: IDelayType;\n /**\n * 事件触发延迟时长\n * @default 0\n */\n delayTime?: number;\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\n}\n\nexport type IBrushType = 'x' | 'y' | 'rect' | 'polygon';\nexport type IBrushMode = 'single' | 'multiple';\n\nexport enum IOperateType {\n drawStart = 'drawStart',\n drawEnd = 'drawEnd',\n drawing = 'drawing',\n moving = 'moving',\n moveStart = 'moveStart',\n moveEnd = 'moveEnd',\n brushActive = 'brushActive',\n brushClear = 'brushClear'\n}\n"]}
|
|
@@ -158,12 +158,14 @@ export declare class DataZoom extends AbstractComponent<Required<DataZoomAttribu
|
|
|
158
158
|
constructor(attributes: DataZoomAttributes, options?: ComponentOptions);
|
|
159
159
|
setAttributes(params: Partial<Required<DataZoomAttributes>>, forceUpdateTag?: boolean): void;
|
|
160
160
|
protected bindEvents(): void;
|
|
161
|
+
private _handleTouchMove;
|
|
161
162
|
protected dragMaskSize(): number;
|
|
162
163
|
protected setStateAttr(start: number, end: number, shouldRender: boolean): void;
|
|
163
164
|
protected eventPosToStagePos(e: FederatedPointerEvent): {
|
|
164
165
|
x: number;
|
|
165
166
|
y: number;
|
|
166
167
|
};
|
|
168
|
+
private _clearDragEvents;
|
|
167
169
|
private _onHandlerPointerDown;
|
|
168
170
|
private _pointerMove;
|
|
169
171
|
private _onHandlerPointerMove;
|
|
@@ -199,4 +201,5 @@ export declare class DataZoom extends AbstractComponent<Required<DataZoomAttribu
|
|
|
199
201
|
setPreviewPointsX1(callback: (d: any) => number): void;
|
|
200
202
|
setPreviewPointsY1(callback: (d: any) => number): void;
|
|
201
203
|
setStatePointToData(callback: (state: number) => any): void;
|
|
204
|
+
release(all?: boolean): void;
|
|
202
205
|
}
|
|
@@ -14,7 +14,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
14
14
|
value: !0
|
|
15
15
|
}), exports.DataZoom = void 0;
|
|
16
16
|
|
|
17
|
-
const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@visactor/vutils"), base_1 = require("../core/base"), tag_1 = require("../tag"), config_1 = require("./config"), type_1 = require("./type"), register_1 = require("./register"), delayMap = {
|
|
17
|
+
const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@visactor/vutils"), base_1 = require("../core/base"), tag_1 = require("../tag"), config_1 = require("./config"), type_1 = require("./type"), register_1 = require("./register"), event_1 = require("../util/event"), delayMap = {
|
|
18
18
|
debounce: vutils_1.debounce,
|
|
19
19
|
throttle: vutils_1.throttle
|
|
20
20
|
};
|
|
@@ -52,21 +52,27 @@ class DataZoom extends base_1.AbstractComponent {
|
|
|
52
52
|
}, this.state = {
|
|
53
53
|
start: 0,
|
|
54
54
|
end: 1
|
|
55
|
-
}, this._statePointToData = state => state, this.
|
|
56
|
-
|
|
55
|
+
}, this._statePointToData = state => state, this._handleTouchMove = e => {
|
|
56
|
+
this._activeState && e.preventDefault();
|
|
57
|
+
}, this._onHandlerPointerDown = (e, tag) => {
|
|
58
|
+
this._clearDragEvents(), "start" === tag ? (this._activeTag = type_1.DataZoomActiveTag.startHandler,
|
|
57
59
|
this._activeItem = this._startHandlerMask) : "end" === tag ? (this._activeTag = type_1.DataZoomActiveTag.endHandler,
|
|
58
60
|
this._activeItem = this._endHandlerMask) : "middleRect" === tag ? (this._activeTag = type_1.DataZoomActiveTag.middleHandler,
|
|
59
61
|
this._activeItem = this._middleHandlerRect) : "middleSymbol" === tag ? (this._activeTag = type_1.DataZoomActiveTag.middleHandler,
|
|
60
62
|
this._activeItem = this._middleHandlerSymbol) : "background" === tag && (this._activeTag = type_1.DataZoomActiveTag.background,
|
|
61
63
|
this._activeItem = this._background), this._activeState = !0, this._activeCache.startPos = this.eventPosToStagePos(e),
|
|
62
|
-
this._activeCache.lastPos = this.eventPosToStagePos(e)
|
|
64
|
+
this._activeCache.lastPos = this.eventPosToStagePos(e);
|
|
65
|
+
const evtTarget = "browser" === vrender_core_1.vglobal.env ? vrender_core_1.vglobal : this.stage, triggers = (0,
|
|
66
|
+
event_1.getEndTriggersOfDrag)();
|
|
67
|
+
evtTarget.addEventListener("pointermove", this._onHandlerPointerMove, {
|
|
63
68
|
capture: !0
|
|
64
|
-
}),
|
|
65
|
-
this.addEventListener("pointermove", this._onHandlerPointerMove, {
|
|
69
|
+
}), this.addEventListener("pointermove", this._onHandlerPointerMove, {
|
|
66
70
|
capture: !0
|
|
67
|
-
})
|
|
71
|
+
}), triggers.forEach((trigger => {
|
|
72
|
+
evtTarget.addEventListener(trigger, this._onHandlerPointerUp);
|
|
73
|
+
}));
|
|
68
74
|
}, this._pointerMove = e => {
|
|
69
|
-
e.
|
|
75
|
+
e.preventDefault();
|
|
70
76
|
const {start: startAttr, end: endAttr, brushSelect: brushSelect, realTime: realTime = !0} = this.attribute, pos = this.eventPosToStagePos(e), {attPos: attPos, max: max} = this._layoutCache, dis = (pos[attPos] - this._activeCache.lastPos[attPos]) / max;
|
|
71
77
|
let {start: start, end: end} = this.state;
|
|
72
78
|
this._activeState && (this._activeTag === type_1.DataZoomActiveTag.middleHandler ? this.moveZoomWithMiddle((this.state.start + this.state.end) / 2 + dis) : this._activeTag === type_1.DataZoomActiveTag.startHandler ? start + dis > end ? (start = end,
|
|
@@ -81,7 +87,6 @@ class DataZoom extends base_1.AbstractComponent {
|
|
|
81
87
|
}));
|
|
82
88
|
}, this._onHandlerPointerMove = 0 === this.attribute.delayTime ? this._pointerMove : delayMap[this.attribute.delayType](this._pointerMove, this.attribute.delayTime),
|
|
83
89
|
this._onHandlerPointerUp = e => {
|
|
84
|
-
e.preventDefault();
|
|
85
90
|
const {start: start, end: end, brushSelect: brushSelect, realTime: realTime = !0} = this.attribute;
|
|
86
91
|
if (this._activeState && this._activeTag === type_1.DataZoomActiveTag.background) {
|
|
87
92
|
const pos = this.eventPosToStagePos(e);
|
|
@@ -91,12 +96,7 @@ class DataZoom extends base_1.AbstractComponent {
|
|
|
91
96
|
start: this.state.start,
|
|
92
97
|
end: this.state.end,
|
|
93
98
|
tag: this._activeTag
|
|
94
|
-
}),
|
|
95
|
-
capture: !0
|
|
96
|
-
}), vrender_core_1.vglobal.removeEventListener("pointerup", this._onHandlerPointerUp)),
|
|
97
|
-
this.removeEventListener("pointermove", this._onHandlerPointerMove, {
|
|
98
|
-
capture: !0
|
|
99
|
-
}), this.removeEventListener("pointerup", this._onHandlerPointerUp);
|
|
99
|
+
}), this._clearDragEvents();
|
|
100
100
|
};
|
|
101
101
|
const {position: position, showDetail: showDetail} = attributes;
|
|
102
102
|
this._activeCache.startPos = position, this._activeCache.lastPos = position, this._showText = "auto" !== showDetail && showDetail,
|
|
@@ -117,9 +117,10 @@ class DataZoom extends base_1.AbstractComponent {
|
|
|
117
117
|
brushSelect && this._background && this._background.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, "background"))),
|
|
118
118
|
brushSelect && this._previewGroup && this._previewGroup.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, "background"))),
|
|
119
119
|
this._selectedPreviewGroup && this._selectedPreviewGroup.addEventListener("pointerdown", (e => this._onHandlerPointerDown(e, selectedTag))),
|
|
120
|
-
this.addEventListener("pointerup", this._onHandlerPointerUp), this.addEventListener("pointerupoutside", this._onHandlerPointerUp),
|
|
121
120
|
"auto" === showDetail && (this.addEventListener("pointerenter", this._onHandlerPointerEnter),
|
|
122
|
-
this.addEventListener("pointerleave", this._onHandlerPointerLeave))
|
|
121
|
+
this.addEventListener("pointerleave", this._onHandlerPointerLeave)), ("browser" === vrender_core_1.vglobal.env ? vrender_core_1.vglobal : this.stage).addEventListener("touchmove", this._handleTouchMove, {
|
|
122
|
+
passive: !1
|
|
123
|
+
});
|
|
123
124
|
}
|
|
124
125
|
dragMaskSize() {
|
|
125
126
|
const {position: position} = this.attribute, {attPos: attPos, max: max} = this._layoutCache;
|
|
@@ -140,11 +141,22 @@ class DataZoom extends base_1.AbstractComponent {
|
|
|
140
141
|
y: 0
|
|
141
142
|
};
|
|
142
143
|
}
|
|
144
|
+
_clearDragEvents() {
|
|
145
|
+
const evtTarget = "browser" === vrender_core_1.vglobal.env ? vrender_core_1.vglobal : this.stage, triggers = (0,
|
|
146
|
+
event_1.getEndTriggersOfDrag)();
|
|
147
|
+
evtTarget.removeEventListener("pointermove", this._onHandlerPointerMove, {
|
|
148
|
+
capture: !0
|
|
149
|
+
}), triggers.forEach((trigger => {
|
|
150
|
+
evtTarget.removeEventListener(trigger, this._onHandlerPointerUp);
|
|
151
|
+
})), this.removeEventListener("pointermove", this._onHandlerPointerMove, {
|
|
152
|
+
capture: !0
|
|
153
|
+
});
|
|
154
|
+
}
|
|
143
155
|
_onHandlerPointerEnter(e) {
|
|
144
|
-
|
|
156
|
+
this._showText = !0, this.renderText();
|
|
145
157
|
}
|
|
146
158
|
_onHandlerPointerLeave(e) {
|
|
147
|
-
|
|
159
|
+
this._showText = !1, this.renderText();
|
|
148
160
|
}
|
|
149
161
|
backgroundDragZoom(startPos, endPos) {
|
|
150
162
|
const {attPos: attPos, max: max} = this._layoutCache, {position: position} = this.attribute, startPosInComponent = startPos[attPos] - position[attPos], endPosInComponent = endPos[attPos] - position[attPos], start = Math.min(Math.max(Math.min(startPosInComponent, endPosInComponent) / max, 0), 1), end = Math.min(Math.max(Math.max(startPosInComponent, endPosInComponent) / max, 0), 1);
|
|
@@ -574,6 +586,11 @@ class DataZoom extends base_1.AbstractComponent {
|
|
|
574
586
|
setStatePointToData(callback) {
|
|
575
587
|
(0, vutils_1.isFunction)(callback) && (this._statePointToData = callback);
|
|
576
588
|
}
|
|
589
|
+
release(all) {
|
|
590
|
+
super.release(all), ("browser" === vrender_core_1.vglobal.env ? vrender_core_1.vglobal : this.stage).addEventListener("touchmove", this._handleTouchMove, {
|
|
591
|
+
passive: !1
|
|
592
|
+
}), this._clearDragEvents();
|
|
593
|
+
}
|
|
577
594
|
}
|
|
578
595
|
|
|
579
596
|
exports.DataZoom = DataZoom, DataZoom.defaultAttributes = config_1.DEFAULT_DATA_ZOOM_ATTRIBUTES;
|