From 150d8f5fc54075edb7af5b3be6afa6ad8f8917eb Mon Sep 17 00:00:00 2001 From: "jianhui.fjh" Date: Wed, 16 Jun 2021 11:02:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=A3=81=E8=B4=B4?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E9=A1=B5=E9=9D=A2=E5=AE=B9=E5=99=A8=E5=81=87?= =?UTF-8?q?=E6=AD=BB=E9=97=AE=E9=A2=98=20to=20#34464969?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/designer/src/designer/dragon.ts | 48 ++++++++++++------------ 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/packages/designer/src/designer/dragon.ts b/packages/designer/src/designer/dragon.ts index c336039ea..5e8c63b9d 100644 --- a/packages/designer/src/designer/dragon.ts +++ b/packages/designer/src/designer/dragon.ts @@ -322,34 +322,33 @@ export class Dragon { return; } lastArrive = e; - const locateEvent = createLocateEvent(e); const sensor = chooseSensor(locateEvent); - this._canDrop = !!sensor?.locate(locateEvent); const { isRGL, rglNode } = getRGLObject(e); if (isRGL) { - // 禁止原生响应 - if (!isFromRGLNode && this._canDrop) { + this._canDrop = !!sensor?.locate(locateEvent); + if (this._canDrop) { this.emitter.emit('rgl.add.placeholder', { rglNode, node: locateEvent.dragObject.nodes[0], event: e, }); - } - designer.clearLocation(); - this.clearState(); - this.emitter.emit('drag', locateEvent); - } else { - if (!isFromRGLNode && this._canDrop) { - this.emitter.emit('rgl.remove.placeholder'); - } - if (sensor) { - sensor.fixEvent(locateEvent); - } else { designer.clearLocation(); + this.clearState(); + this.emitter.emit('drag', locateEvent); + return; } - this.emitter.emit('drag', locateEvent); + } else { + this._canDrop = false; + this.emitter.emit('rgl.remove.placeholder'); } + if (sensor) { + sensor.locate(locateEvent); + sensor.fixEvent(locateEvent); + } else { + designer.clearLocation(); + } + this.emitter.emit('drag', locateEvent); }; const dragstart = () => { @@ -405,14 +404,17 @@ export class Dragon { // 发送drop事件 if (e) { const { isRGL, rglNode } = getRGLObject(e); - if (isRGL && !isFromRGLNode && this._canDrop) { + if (isRGL && this._canDrop) { const tarNode = dragObject.nodes[0]; - this.emitter.emit('rgl.drop', { - rglNode, - node: tarNode, - }); - const { selection } = designer.project.currentDocument; - selection.select(tarNode.id); + if (rglNode.id !== tarNode.id) { + // 避免死循环 + this.emitter.emit('rgl.drop', { + rglNode, + node: tarNode, + }); + const { selection } = designer.project.currentDocument; + selection.select(tarNode.id); + } } }