diff --git a/packages/designer/src/builtin-simulator/host.ts b/packages/designer/src/builtin-simulator/host.ts index efe00d474..69ff68164 100644 --- a/packages/designer/src/builtin-simulator/host.ts +++ b/packages/designer/src/builtin-simulator/host.ts @@ -545,71 +545,20 @@ export class BuiltinSimulatorHost implements ISimulatorHost { - const _nodeInst = this.getNodeInstanceFromElement(e.target as Element); - const _node = _nodeInst?.node; - if (!_node) return { status: false }; - const { isRGL: _isRGL, rglNode: _rglNode } = _node.getRGL(); - const status = !!( - _isRGL && - _rglNode?.id !== rglNode?.id && - _rglNode?.getParent() !== node && - _node !== nodeInst?.node - ); - return { status, rglNode: _rglNode }; - }; - const move = (e: MouseEvent) => { - if (!isShaken(downEvent, e)) { - if (nodeInst.instance && nodeInst.instance.style) { - nodeInst.instance.style.pointerEvents = 'none'; - } - } - const { status, rglNode: _rglNode } = judgeEnterOtherRGL(e); - if (status) { - designer.dragon.emitter.emit('rgl.add.placeholder', { - rglNode: _rglNode, - node, - event: e, - fromRglNode: rglNode, - }); - } else { - designer.dragon.emitter.emit('rgl.remove.placeholder'); - } - }; - const over = (e: MouseEvent) => { - const { status, rglNode: _rglNode } = judgeEnterOtherRGL(e); - if (status) { - designer.dragon.emitter.emit('rgl.drop', { - rglNode: _rglNode, - node, - fromRglNode: rglNode, - }); - } - designer.dragon.emitter.emit('rgl.remove.placeholder'); - if (nodeInst.instance && nodeInst.instance.style) { - nodeInst.instance.style.pointerEvents = ''; - } - designer.dragon.emitter.emit('rgl.switch', { - action: 'end', - rglNode, - }); - doc.removeEventListener('mouseup', over, true); - doc.removeEventListener('mousemove', move, true); - }; - doc.addEventListener('mouseup', over, true); - doc.addEventListener('mousemove', move, true); } else { // stop response document focus event + // 禁止原生拖拽 downEvent.stopPropagation(); downEvent.preventDefault(); } @@ -620,6 +569,11 @@ export class BuiltinSimulatorHost implements ISimulatorHost { doc.removeEventListener('mouseup', checkSelect, true); + // 取消移动; + designer.dragon.emitter.emit('rgl.switch', { + action: 'end', + rglNode, + }); // 鼠标是否移动 ? - 鼠标抖动应该也需要支持选中事件,偶尔点击不能选中,磁帖块移除shaken检测 if (!isShaken(downEvent, e) || isRGLNode) { let { id } = node; @@ -665,16 +619,14 @@ export class BuiltinSimulatorHost implements ISimulatorHost { + // 禁止被拖拽元素的阻断 + if (this.nodeInstPointerEvents) { + const nodeInst = dragObject.nodes[0].getDOMNode(); + if (nodeInst && nodeInst.style) { + nodeInst.style.pointerEvents = ''; + } + this.nodeInstPointerEvents = false; + } + // 发送drop事件 if (e) { const { isRGL, rglNode } = getRGL(e); @@ -414,6 +441,9 @@ export class Dragon { } } + // 移除磁帖占位消息 + this.emitter.emit('rgl.remove.placeholder'); + /* istanbul ignore next */ if (e && isDragEvent(e)) { e.preventDefault();