@knotx/plugins-drag 0.3.4 → 0.3.6
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/dist/index.cjs +68 -12
- package/dist/index.d.cts +10 -2
- package/dist/index.d.mts +10 -2
- package/dist/index.d.ts +10 -2
- package/dist/index.js +68 -12
- package/package.json +10 -10
package/dist/index.cjs
CHANGED
|
@@ -78,7 +78,7 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
|
|
|
78
78
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
79
79
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
80
80
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
81
|
-
var _destroy_dec, _init_dec, _registerOptionsTransformer_dec, _options_dec,
|
|
81
|
+
var _destroy_dec, _init_dec, _registerOptionsTransformer_dec, _options_dec, _edgeScroll_dec, _canvasTransform_dec, _interaction_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
|
|
82
82
|
const DEFAULT_OPTIONS = {
|
|
83
83
|
inertia: {
|
|
84
84
|
enabled: true
|
|
@@ -90,7 +90,7 @@ const DEFAULT_OPTIONS = {
|
|
|
90
90
|
})
|
|
91
91
|
]
|
|
92
92
|
};
|
|
93
|
-
class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getNode()], _dispatchNodeOperation_dec = [decorators.inject.dispatchNodeOperation()], _interaction_dec = [decorators.inject.interaction()],
|
|
93
|
+
class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getNode()], _dispatchNodeOperation_dec = [decorators.inject.dispatchNodeOperation()], _interaction_dec = [decorators.inject.interaction()], _canvasTransform_dec = [decorators.inject.canvas.transform()], _edgeScroll_dec = [decorators.inject.canvas.edgeScroll()], _options_dec = [decorators.register("options")], _registerOptionsTransformer_dec = [decorators.register("registerOptionsTransformer")], _init_dec = [decorators.OnInit], _destroy_dec = [decorators.OnDestroy], _a) {
|
|
94
94
|
constructor() {
|
|
95
95
|
super(...arguments);
|
|
96
96
|
__runInitializers(_init, 5, this);
|
|
@@ -98,12 +98,16 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
|
|
|
98
98
|
__publicField(this, "getNode", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
|
|
99
99
|
__publicField(this, "dispatchNodeOperation", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
|
|
100
100
|
__publicField(this, "interaction", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
|
|
101
|
-
__publicField(this, "
|
|
101
|
+
__publicField(this, "canvasTransform", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
|
|
102
|
+
__publicField(this, "edgeScroll", __runInitializers(_init, 24, this)), __runInitializers(_init, 27, this);
|
|
102
103
|
__publicField(this, "subscription");
|
|
103
104
|
__publicField(this, "transformers$", new rxjs.BehaviorSubject([]));
|
|
104
105
|
__publicField(this, "currentInteractable");
|
|
105
|
-
__publicField(this, "
|
|
106
|
-
__publicField(this, "
|
|
106
|
+
__publicField(this, "lastCanvasPosition", { x: 0, y: 0 });
|
|
107
|
+
__publicField(this, "isDragging", false);
|
|
108
|
+
__publicField(this, "canvasScrollAnimationFrame", null);
|
|
109
|
+
__publicField(this, "options", __runInitializers(_init, 28, this, DEFAULT_OPTIONS)), __runInitializers(_init, 31, this);
|
|
110
|
+
__publicField(this, "registerOptionsTransformer", __runInitializers(_init, 32, this, (transformer) => {
|
|
107
111
|
const transformers = this.transformers$.value;
|
|
108
112
|
transformers.push(transformer);
|
|
109
113
|
this.transformers$.next(transformers);
|
|
@@ -115,7 +119,7 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
|
|
|
115
119
|
this.transformers$.next(currentTransformers);
|
|
116
120
|
}
|
|
117
121
|
};
|
|
118
|
-
})), __runInitializers(_init,
|
|
122
|
+
})), __runInitializers(_init, 35, this);
|
|
119
123
|
}
|
|
120
124
|
/**
|
|
121
125
|
* 应用所有转换器,生成最终的配置
|
|
@@ -153,37 +157,84 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
|
|
|
153
157
|
const options = this.applyTransformers(nodeId);
|
|
154
158
|
this.currentInteractable.draggable(options);
|
|
155
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* 监听画布滚动,即使鼠标不动也更新拖拽元素位置
|
|
162
|
+
*/
|
|
163
|
+
startCanvasScrollListener(dragMove$) {
|
|
164
|
+
if (this.canvasScrollAnimationFrame !== null) {
|
|
165
|
+
cancelAnimationFrame(this.canvasScrollAnimationFrame);
|
|
166
|
+
}
|
|
167
|
+
const checkCanvasScroll = () => {
|
|
168
|
+
if (!this.isDragging) {
|
|
169
|
+
this.canvasScrollAnimationFrame = null;
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const { positionX, positionY } = this.canvasTransform;
|
|
173
|
+
const deltaX = positionX - this.lastCanvasPosition.x;
|
|
174
|
+
const deltaY = positionY - this.lastCanvasPosition.y;
|
|
175
|
+
if (deltaX !== 0 || deltaY !== 0) {
|
|
176
|
+
dragMove$.next({
|
|
177
|
+
dx: 0,
|
|
178
|
+
// 鼠标没动,所以dx和dy为0
|
|
179
|
+
dy: 0,
|
|
180
|
+
canvasPositionDelta: { x: deltaX, y: deltaY }
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
this.lastCanvasPosition = { x: positionX, y: positionY };
|
|
184
|
+
this.canvasScrollAnimationFrame = requestAnimationFrame(checkCanvasScroll);
|
|
185
|
+
};
|
|
186
|
+
this.canvasScrollAnimationFrame = requestAnimationFrame(checkCanvasScroll);
|
|
187
|
+
}
|
|
156
188
|
init() {
|
|
157
189
|
const dragStart$ = new rxjs.Subject();
|
|
158
190
|
const dragMove$ = new rxjs.Subject();
|
|
159
191
|
const dragEnd$ = new rxjs.Subject();
|
|
160
192
|
const end = () => {
|
|
161
|
-
var _a2;
|
|
193
|
+
var _a2, _b;
|
|
162
194
|
dragEnd$.next();
|
|
195
|
+
this.isDragging = false;
|
|
196
|
+
if (this.canvasScrollAnimationFrame !== null) {
|
|
197
|
+
cancelAnimationFrame(this.canvasScrollAnimationFrame);
|
|
198
|
+
this.canvasScrollAnimationFrame = null;
|
|
199
|
+
}
|
|
163
200
|
(_a2 = this.currentInteractable) == null ? void 0 : _a2.draggable(this.options);
|
|
164
201
|
this.interaction.end(this.pluginId, "position");
|
|
202
|
+
(_b = this.edgeScroll) == null ? void 0 : _b.setConfig({ enabled: false });
|
|
165
203
|
};
|
|
166
204
|
this.currentInteractable = interact__default(`.${core.bem("node", "wrapper")}[data-node-id]`).draggable(__spreadProps(__spreadValues({}, this.options), {
|
|
167
205
|
listeners: {
|
|
168
206
|
start: (event) => {
|
|
207
|
+
var _a2;
|
|
169
208
|
const target = event.target;
|
|
170
209
|
const nodeId = target.getAttribute("data-node-id");
|
|
171
210
|
if (!nodeId)
|
|
172
211
|
return;
|
|
212
|
+
this.isDragging = true;
|
|
213
|
+
const { positionX, positionY } = this.canvasTransform;
|
|
214
|
+
this.lastCanvasPosition = { x: positionX, y: positionY };
|
|
173
215
|
dragStart$.next({
|
|
174
216
|
nodeId
|
|
175
217
|
});
|
|
218
|
+
this.startCanvasScrollListener(dragMove$);
|
|
176
219
|
this.interaction.start(this.pluginId, "position", core.InteractionPriority.EntityPositionDrag);
|
|
220
|
+
(_a2 = this.edgeScroll) == null ? void 0 : _a2.setConfig({ enabled: true });
|
|
177
221
|
},
|
|
178
222
|
move: (event) => {
|
|
179
223
|
if (!this.interaction.canInteract(core.InteractionPriority.EntityPositionDrag)) {
|
|
180
224
|
end();
|
|
181
225
|
return;
|
|
182
226
|
}
|
|
183
|
-
const scale = this.
|
|
227
|
+
const { positionX, positionY, scale } = this.canvasTransform || {};
|
|
228
|
+
let canvasPositionDelta = { x: 0, y: 0 };
|
|
229
|
+
canvasPositionDelta = {
|
|
230
|
+
x: positionX - this.lastCanvasPosition.x,
|
|
231
|
+
y: positionY - this.lastCanvasPosition.y
|
|
232
|
+
};
|
|
233
|
+
this.lastCanvasPosition = { x: positionX, y: positionY };
|
|
184
234
|
dragMove$.next({
|
|
185
235
|
dx: event.dx / scale,
|
|
186
|
-
dy: event.dy / scale
|
|
236
|
+
dy: event.dy / scale,
|
|
237
|
+
canvasPositionDelta
|
|
187
238
|
});
|
|
188
239
|
},
|
|
189
240
|
// 拖拽结束
|
|
@@ -206,8 +257,8 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
|
|
|
206
257
|
return dragMove$.pipe(
|
|
207
258
|
operators.skip(1),
|
|
208
259
|
operators.map((moveEvent) => {
|
|
209
|
-
currentPosition.x += moveEvent.dx;
|
|
210
|
-
currentPosition.y += moveEvent.dy;
|
|
260
|
+
currentPosition.x += moveEvent.dx - moveEvent.canvasPositionDelta.x / this.canvasTransform.scale;
|
|
261
|
+
currentPosition.y += moveEvent.dy - moveEvent.canvasPositionDelta.y / this.canvasTransform.scale;
|
|
211
262
|
return {
|
|
212
263
|
nodeId,
|
|
213
264
|
position: currentPosition
|
|
@@ -245,6 +296,10 @@ class Drag extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getN
|
|
|
245
296
|
this.subscription.add(() => {
|
|
246
297
|
var _a2;
|
|
247
298
|
(_a2 = this.currentInteractable) == null ? void 0 : _a2.unset();
|
|
299
|
+
if (this.canvasScrollAnimationFrame !== null) {
|
|
300
|
+
cancelAnimationFrame(this.canvasScrollAnimationFrame);
|
|
301
|
+
this.canvasScrollAnimationFrame = null;
|
|
302
|
+
}
|
|
248
303
|
dragStart$.complete();
|
|
249
304
|
dragMove$.complete();
|
|
250
305
|
dragEnd$.complete();
|
|
@@ -261,7 +316,8 @@ __decorateElement(_init, 1, "destroy", _destroy_dec, Drag);
|
|
|
261
316
|
__decorateElement(_init, 5, "getNode", _getNode_dec, Drag);
|
|
262
317
|
__decorateElement(_init, 5, "dispatchNodeOperation", _dispatchNodeOperation_dec, Drag);
|
|
263
318
|
__decorateElement(_init, 5, "interaction", _interaction_dec, Drag);
|
|
264
|
-
__decorateElement(_init, 5, "
|
|
319
|
+
__decorateElement(_init, 5, "canvasTransform", _canvasTransform_dec, Drag);
|
|
320
|
+
__decorateElement(_init, 5, "edgeScroll", _edgeScroll_dec, Drag);
|
|
265
321
|
__decorateElement(_init, 5, "options", _options_dec, Drag);
|
|
266
322
|
__decorateElement(_init, 5, "registerOptionsTransformer", _registerOptionsTransformer_dec, Drag);
|
|
267
323
|
__decoratorMetadata(_init, Drag);
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DraggableOptions as DraggableOptions$1 } from '@interactjs/actions/drag/plugin';
|
|
2
|
-
import { Node, BasePlugin, Engine } from '@knotx/core';
|
|
2
|
+
import { Node, BasePlugin, Engine, PluginData } from '@knotx/core';
|
|
3
3
|
|
|
4
4
|
type DraggableOptions = Omit<DraggableOptions$1, 'listeners'>;
|
|
5
5
|
interface DragTransformerContext {
|
|
@@ -22,10 +22,14 @@ declare class Drag extends BasePlugin {
|
|
|
22
22
|
getNode: Engine['getNode'];
|
|
23
23
|
dispatchNodeOperation: Engine['dispatchNodeOperation'];
|
|
24
24
|
interaction: Engine['interaction'];
|
|
25
|
-
|
|
25
|
+
canvasTransform: PluginData['canvas']['transform'];
|
|
26
|
+
edgeScroll: PluginData['canvas']['edgeScroll'];
|
|
26
27
|
private subscription?;
|
|
27
28
|
private transformers$;
|
|
28
29
|
private currentInteractable?;
|
|
30
|
+
private lastCanvasPosition;
|
|
31
|
+
private isDragging;
|
|
32
|
+
private canvasScrollAnimationFrame;
|
|
29
33
|
options: DraggableOptions;
|
|
30
34
|
registerOptionsTransformer: (transformer: DragOptionsTransformer) => () => void;
|
|
31
35
|
/**
|
|
@@ -36,6 +40,10 @@ declare class Drag extends BasePlugin {
|
|
|
36
40
|
* 更新 interactable 的配置
|
|
37
41
|
*/
|
|
38
42
|
private updateInteractableOptions;
|
|
43
|
+
/**
|
|
44
|
+
* 监听画布滚动,即使鼠标不动也更新拖拽元素位置
|
|
45
|
+
*/
|
|
46
|
+
private startCanvasScrollListener;
|
|
39
47
|
init(): void;
|
|
40
48
|
destroy(): void;
|
|
41
49
|
}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DraggableOptions as DraggableOptions$1 } from '@interactjs/actions/drag/plugin';
|
|
2
|
-
import { Node, BasePlugin, Engine } from '@knotx/core';
|
|
2
|
+
import { Node, BasePlugin, Engine, PluginData } from '@knotx/core';
|
|
3
3
|
|
|
4
4
|
type DraggableOptions = Omit<DraggableOptions$1, 'listeners'>;
|
|
5
5
|
interface DragTransformerContext {
|
|
@@ -22,10 +22,14 @@ declare class Drag extends BasePlugin {
|
|
|
22
22
|
getNode: Engine['getNode'];
|
|
23
23
|
dispatchNodeOperation: Engine['dispatchNodeOperation'];
|
|
24
24
|
interaction: Engine['interaction'];
|
|
25
|
-
|
|
25
|
+
canvasTransform: PluginData['canvas']['transform'];
|
|
26
|
+
edgeScroll: PluginData['canvas']['edgeScroll'];
|
|
26
27
|
private subscription?;
|
|
27
28
|
private transformers$;
|
|
28
29
|
private currentInteractable?;
|
|
30
|
+
private lastCanvasPosition;
|
|
31
|
+
private isDragging;
|
|
32
|
+
private canvasScrollAnimationFrame;
|
|
29
33
|
options: DraggableOptions;
|
|
30
34
|
registerOptionsTransformer: (transformer: DragOptionsTransformer) => () => void;
|
|
31
35
|
/**
|
|
@@ -36,6 +40,10 @@ declare class Drag extends BasePlugin {
|
|
|
36
40
|
* 更新 interactable 的配置
|
|
37
41
|
*/
|
|
38
42
|
private updateInteractableOptions;
|
|
43
|
+
/**
|
|
44
|
+
* 监听画布滚动,即使鼠标不动也更新拖拽元素位置
|
|
45
|
+
*/
|
|
46
|
+
private startCanvasScrollListener;
|
|
39
47
|
init(): void;
|
|
40
48
|
destroy(): void;
|
|
41
49
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DraggableOptions as DraggableOptions$1 } from '@interactjs/actions/drag/plugin';
|
|
2
|
-
import { Node, BasePlugin, Engine } from '@knotx/core';
|
|
2
|
+
import { Node, BasePlugin, Engine, PluginData } from '@knotx/core';
|
|
3
3
|
|
|
4
4
|
type DraggableOptions = Omit<DraggableOptions$1, 'listeners'>;
|
|
5
5
|
interface DragTransformerContext {
|
|
@@ -22,10 +22,14 @@ declare class Drag extends BasePlugin {
|
|
|
22
22
|
getNode: Engine['getNode'];
|
|
23
23
|
dispatchNodeOperation: Engine['dispatchNodeOperation'];
|
|
24
24
|
interaction: Engine['interaction'];
|
|
25
|
-
|
|
25
|
+
canvasTransform: PluginData['canvas']['transform'];
|
|
26
|
+
edgeScroll: PluginData['canvas']['edgeScroll'];
|
|
26
27
|
private subscription?;
|
|
27
28
|
private transformers$;
|
|
28
29
|
private currentInteractable?;
|
|
30
|
+
private lastCanvasPosition;
|
|
31
|
+
private isDragging;
|
|
32
|
+
private canvasScrollAnimationFrame;
|
|
29
33
|
options: DraggableOptions;
|
|
30
34
|
registerOptionsTransformer: (transformer: DragOptionsTransformer) => () => void;
|
|
31
35
|
/**
|
|
@@ -36,6 +40,10 @@ declare class Drag extends BasePlugin {
|
|
|
36
40
|
* 更新 interactable 的配置
|
|
37
41
|
*/
|
|
38
42
|
private updateInteractableOptions;
|
|
43
|
+
/**
|
|
44
|
+
* 监听画布滚动,即使鼠标不动也更新拖拽元素位置
|
|
45
|
+
*/
|
|
46
|
+
private startCanvasScrollListener;
|
|
39
47
|
init(): void;
|
|
40
48
|
destroy(): void;
|
|
41
49
|
}
|
package/dist/index.js
CHANGED
|
@@ -72,7 +72,7 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
|
|
|
72
72
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
73
73
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
74
74
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
75
|
-
var _destroy_dec, _init_dec, _registerOptionsTransformer_dec, _options_dec,
|
|
75
|
+
var _destroy_dec, _init_dec, _registerOptionsTransformer_dec, _options_dec, _edgeScroll_dec, _canvasTransform_dec, _interaction_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
|
|
76
76
|
const DEFAULT_OPTIONS = {
|
|
77
77
|
inertia: {
|
|
78
78
|
enabled: true
|
|
@@ -84,7 +84,7 @@ const DEFAULT_OPTIONS = {
|
|
|
84
84
|
})
|
|
85
85
|
]
|
|
86
86
|
};
|
|
87
|
-
class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatchNodeOperation_dec = [inject.dispatchNodeOperation()], _interaction_dec = [inject.interaction()],
|
|
87
|
+
class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatchNodeOperation_dec = [inject.dispatchNodeOperation()], _interaction_dec = [inject.interaction()], _canvasTransform_dec = [inject.canvas.transform()], _edgeScroll_dec = [inject.canvas.edgeScroll()], _options_dec = [register("options")], _registerOptionsTransformer_dec = [register("registerOptionsTransformer")], _init_dec = [OnInit], _destroy_dec = [OnDestroy], _a) {
|
|
88
88
|
constructor() {
|
|
89
89
|
super(...arguments);
|
|
90
90
|
__runInitializers(_init, 5, this);
|
|
@@ -92,12 +92,16 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
|
|
|
92
92
|
__publicField(this, "getNode", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
|
|
93
93
|
__publicField(this, "dispatchNodeOperation", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
|
|
94
94
|
__publicField(this, "interaction", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
|
|
95
|
-
__publicField(this, "
|
|
95
|
+
__publicField(this, "canvasTransform", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
|
|
96
|
+
__publicField(this, "edgeScroll", __runInitializers(_init, 24, this)), __runInitializers(_init, 27, this);
|
|
96
97
|
__publicField(this, "subscription");
|
|
97
98
|
__publicField(this, "transformers$", new BehaviorSubject([]));
|
|
98
99
|
__publicField(this, "currentInteractable");
|
|
99
|
-
__publicField(this, "
|
|
100
|
-
__publicField(this, "
|
|
100
|
+
__publicField(this, "lastCanvasPosition", { x: 0, y: 0 });
|
|
101
|
+
__publicField(this, "isDragging", false);
|
|
102
|
+
__publicField(this, "canvasScrollAnimationFrame", null);
|
|
103
|
+
__publicField(this, "options", __runInitializers(_init, 28, this, DEFAULT_OPTIONS)), __runInitializers(_init, 31, this);
|
|
104
|
+
__publicField(this, "registerOptionsTransformer", __runInitializers(_init, 32, this, (transformer) => {
|
|
101
105
|
const transformers = this.transformers$.value;
|
|
102
106
|
transformers.push(transformer);
|
|
103
107
|
this.transformers$.next(transformers);
|
|
@@ -109,7 +113,7 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
|
|
|
109
113
|
this.transformers$.next(currentTransformers);
|
|
110
114
|
}
|
|
111
115
|
};
|
|
112
|
-
})), __runInitializers(_init,
|
|
116
|
+
})), __runInitializers(_init, 35, this);
|
|
113
117
|
}
|
|
114
118
|
/**
|
|
115
119
|
* 应用所有转换器,生成最终的配置
|
|
@@ -147,37 +151,84 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
|
|
|
147
151
|
const options = this.applyTransformers(nodeId);
|
|
148
152
|
this.currentInteractable.draggable(options);
|
|
149
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* 监听画布滚动,即使鼠标不动也更新拖拽元素位置
|
|
156
|
+
*/
|
|
157
|
+
startCanvasScrollListener(dragMove$) {
|
|
158
|
+
if (this.canvasScrollAnimationFrame !== null) {
|
|
159
|
+
cancelAnimationFrame(this.canvasScrollAnimationFrame);
|
|
160
|
+
}
|
|
161
|
+
const checkCanvasScroll = () => {
|
|
162
|
+
if (!this.isDragging) {
|
|
163
|
+
this.canvasScrollAnimationFrame = null;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const { positionX, positionY } = this.canvasTransform;
|
|
167
|
+
const deltaX = positionX - this.lastCanvasPosition.x;
|
|
168
|
+
const deltaY = positionY - this.lastCanvasPosition.y;
|
|
169
|
+
if (deltaX !== 0 || deltaY !== 0) {
|
|
170
|
+
dragMove$.next({
|
|
171
|
+
dx: 0,
|
|
172
|
+
// 鼠标没动,所以dx和dy为0
|
|
173
|
+
dy: 0,
|
|
174
|
+
canvasPositionDelta: { x: deltaX, y: deltaY }
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
this.lastCanvasPosition = { x: positionX, y: positionY };
|
|
178
|
+
this.canvasScrollAnimationFrame = requestAnimationFrame(checkCanvasScroll);
|
|
179
|
+
};
|
|
180
|
+
this.canvasScrollAnimationFrame = requestAnimationFrame(checkCanvasScroll);
|
|
181
|
+
}
|
|
150
182
|
init() {
|
|
151
183
|
const dragStart$ = new Subject();
|
|
152
184
|
const dragMove$ = new Subject();
|
|
153
185
|
const dragEnd$ = new Subject();
|
|
154
186
|
const end = () => {
|
|
155
|
-
var _a2;
|
|
187
|
+
var _a2, _b;
|
|
156
188
|
dragEnd$.next();
|
|
189
|
+
this.isDragging = false;
|
|
190
|
+
if (this.canvasScrollAnimationFrame !== null) {
|
|
191
|
+
cancelAnimationFrame(this.canvasScrollAnimationFrame);
|
|
192
|
+
this.canvasScrollAnimationFrame = null;
|
|
193
|
+
}
|
|
157
194
|
(_a2 = this.currentInteractable) == null ? void 0 : _a2.draggable(this.options);
|
|
158
195
|
this.interaction.end(this.pluginId, "position");
|
|
196
|
+
(_b = this.edgeScroll) == null ? void 0 : _b.setConfig({ enabled: false });
|
|
159
197
|
};
|
|
160
198
|
this.currentInteractable = interact(`.${bem("node", "wrapper")}[data-node-id]`).draggable(__spreadProps(__spreadValues({}, this.options), {
|
|
161
199
|
listeners: {
|
|
162
200
|
start: (event) => {
|
|
201
|
+
var _a2;
|
|
163
202
|
const target = event.target;
|
|
164
203
|
const nodeId = target.getAttribute("data-node-id");
|
|
165
204
|
if (!nodeId)
|
|
166
205
|
return;
|
|
206
|
+
this.isDragging = true;
|
|
207
|
+
const { positionX, positionY } = this.canvasTransform;
|
|
208
|
+
this.lastCanvasPosition = { x: positionX, y: positionY };
|
|
167
209
|
dragStart$.next({
|
|
168
210
|
nodeId
|
|
169
211
|
});
|
|
212
|
+
this.startCanvasScrollListener(dragMove$);
|
|
170
213
|
this.interaction.start(this.pluginId, "position", InteractionPriority.EntityPositionDrag);
|
|
214
|
+
(_a2 = this.edgeScroll) == null ? void 0 : _a2.setConfig({ enabled: true });
|
|
171
215
|
},
|
|
172
216
|
move: (event) => {
|
|
173
217
|
if (!this.interaction.canInteract(InteractionPriority.EntityPositionDrag)) {
|
|
174
218
|
end();
|
|
175
219
|
return;
|
|
176
220
|
}
|
|
177
|
-
const scale = this.
|
|
221
|
+
const { positionX, positionY, scale } = this.canvasTransform || {};
|
|
222
|
+
let canvasPositionDelta = { x: 0, y: 0 };
|
|
223
|
+
canvasPositionDelta = {
|
|
224
|
+
x: positionX - this.lastCanvasPosition.x,
|
|
225
|
+
y: positionY - this.lastCanvasPosition.y
|
|
226
|
+
};
|
|
227
|
+
this.lastCanvasPosition = { x: positionX, y: positionY };
|
|
178
228
|
dragMove$.next({
|
|
179
229
|
dx: event.dx / scale,
|
|
180
|
-
dy: event.dy / scale
|
|
230
|
+
dy: event.dy / scale,
|
|
231
|
+
canvasPositionDelta
|
|
181
232
|
});
|
|
182
233
|
},
|
|
183
234
|
// 拖拽结束
|
|
@@ -200,8 +251,8 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
|
|
|
200
251
|
return dragMove$.pipe(
|
|
201
252
|
skip(1),
|
|
202
253
|
map((moveEvent) => {
|
|
203
|
-
currentPosition.x += moveEvent.dx;
|
|
204
|
-
currentPosition.y += moveEvent.dy;
|
|
254
|
+
currentPosition.x += moveEvent.dx - moveEvent.canvasPositionDelta.x / this.canvasTransform.scale;
|
|
255
|
+
currentPosition.y += moveEvent.dy - moveEvent.canvasPositionDelta.y / this.canvasTransform.scale;
|
|
205
256
|
return {
|
|
206
257
|
nodeId,
|
|
207
258
|
position: currentPosition
|
|
@@ -239,6 +290,10 @@ class Drag extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatc
|
|
|
239
290
|
this.subscription.add(() => {
|
|
240
291
|
var _a2;
|
|
241
292
|
(_a2 = this.currentInteractable) == null ? void 0 : _a2.unset();
|
|
293
|
+
if (this.canvasScrollAnimationFrame !== null) {
|
|
294
|
+
cancelAnimationFrame(this.canvasScrollAnimationFrame);
|
|
295
|
+
this.canvasScrollAnimationFrame = null;
|
|
296
|
+
}
|
|
242
297
|
dragStart$.complete();
|
|
243
298
|
dragMove$.complete();
|
|
244
299
|
dragEnd$.complete();
|
|
@@ -255,7 +310,8 @@ __decorateElement(_init, 1, "destroy", _destroy_dec, Drag);
|
|
|
255
310
|
__decorateElement(_init, 5, "getNode", _getNode_dec, Drag);
|
|
256
311
|
__decorateElement(_init, 5, "dispatchNodeOperation", _dispatchNodeOperation_dec, Drag);
|
|
257
312
|
__decorateElement(_init, 5, "interaction", _interaction_dec, Drag);
|
|
258
|
-
__decorateElement(_init, 5, "
|
|
313
|
+
__decorateElement(_init, 5, "canvasTransform", _canvasTransform_dec, Drag);
|
|
314
|
+
__decorateElement(_init, 5, "edgeScroll", _edgeScroll_dec, Drag);
|
|
259
315
|
__decorateElement(_init, 5, "options", _options_dec, Drag);
|
|
260
316
|
__decorateElement(_init, 5, "registerOptionsTransformer", _registerOptionsTransformer_dec, Drag);
|
|
261
317
|
__decoratorMetadata(_init, Drag);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knotx/plugins-drag",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6",
|
|
4
4
|
"description": "Drag Plugin for Knotx",
|
|
5
5
|
"author": "boenfu",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"dist"
|
|
29
29
|
],
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@knotx/jsx": "0.3.
|
|
32
|
-
"@knotx/plugins-canvas": "0.3.
|
|
31
|
+
"@knotx/jsx": "0.3.6",
|
|
32
|
+
"@knotx/plugins-canvas": "0.3.6"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@interactjs/actions": "^1.10.27",
|
|
@@ -38,15 +38,15 @@
|
|
|
38
38
|
"@interactjs/types": "^1.10.27",
|
|
39
39
|
"interactjs": "^1.10.27",
|
|
40
40
|
"rxjs": "^7.8.1",
|
|
41
|
-
"@knotx/core": "0.3.
|
|
42
|
-
"@knotx/decorators": "0.3.
|
|
41
|
+
"@knotx/core": "0.3.6",
|
|
42
|
+
"@knotx/decorators": "0.3.6"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@knotx/build-config": "0.3.
|
|
46
|
-
"@knotx/eslint-config": "0.3.
|
|
47
|
-
"@knotx/jsx": "0.3.
|
|
48
|
-
"@knotx/plugins-canvas": "0.3.
|
|
49
|
-
"@knotx/typescript-config": "0.3.
|
|
45
|
+
"@knotx/build-config": "0.3.6",
|
|
46
|
+
"@knotx/eslint-config": "0.3.6",
|
|
47
|
+
"@knotx/jsx": "0.3.6",
|
|
48
|
+
"@knotx/plugins-canvas": "0.3.6",
|
|
49
|
+
"@knotx/typescript-config": "0.3.6"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
52
|
"build": "unbuild",
|