From 0fa731c3a24f56ccb9e7fc4770b84e9283684d9f Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Fri, 1 Dec 2023 10:23:32 +0800 Subject: [PATCH] =?UTF-8?q?Fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=9C=A8?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E7=BC=96=E8=BE=91=E7=8A=B6=E6=80=81=E4=B8=AD?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E9=BC=A0=E6=A0=87=E6=BB=9A=E8=BD=AE=E7=BC=A9?= =?UTF-8?q?=E6=94=BE=E7=94=BB=E5=B8=83=E5=86=8D=E6=8E=A8=E5=87=BA=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E7=BC=96=E8=BE=91=E5=90=8E=E5=BF=AB=E6=8D=B7=E9=94=AE?= =?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/core/render/TextEdit.js | 54 ++++++++++++++++----- simple-mind-map/src/plugins/RichText.js | 8 +-- 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/simple-mind-map/src/core/render/TextEdit.js b/simple-mind-map/src/core/render/TextEdit.js index d05dbcd3..a38e783d 100644 --- a/simple-mind-map/src/core/render/TextEdit.js +++ b/simple-mind-map/src/core/render/TextEdit.js @@ -30,7 +30,9 @@ export default class TextEdit { this.onScale = this.onScale.bind(this) this.onKeydown = this.onKeydown.bind(this) // 节点双击事件 - this.mindMap.on('node_dblclick', this.show) + this.mindMap.on('node_dblclick', node => { + this.show({ node }) + }) // 点击事件 this.mindMap.on('draw_click', () => { // 隐藏文本编辑框 @@ -56,7 +58,9 @@ export default class TextEdit { }) // 鼠标滚动事件 this.mindMap.on('mousewheel', () => { - if (this.mindMap.opt.mousewheelAction === CONSTANTS.MOUSE_WHEEL_ACTION.MOVE) { + if ( + this.mindMap.opt.mousewheelAction === CONSTANTS.MOUSE_WHEEL_ACTION.MOVE + ) { this.hideEditTextBox() } }) @@ -65,7 +69,9 @@ export default class TextEdit { if (this.renderer.activeNodeList.length <= 0) { return } - this.show(this.renderer.activeNodeList[0]) + this.show({ + node: this.renderer.activeNodeList[0] + }) }) this.mindMap.on('scale', this.onScale) // // 监听按键事件,判断是否自动进入文本编辑模式 @@ -89,7 +95,12 @@ export default class TextEdit { const node = activeNodeList[0] // 当正在输入中文或英文或数字时,如果没有按下组合键,那么自动进入文本编辑模式 if (node && this.checkIsAutoEnterTextEditKey(e)) { - this.show(node, e, false, true) + this.show({ + node, + e, + isInserting: false, + isFromKeyDown: true + }) } } @@ -118,12 +129,17 @@ export default class TextEdit { // 显示文本编辑框 // isInserting:是否是刚创建的节点 // isFromKeyDown:是否是在按键事件进入的编辑 - async show(node, e, isInserting = false, isFromKeyDown = false) { + async show({ + node, + isInserting = false, + isFromKeyDown = false, + isFromScale = false + }) { // 使用了自定义节点内容那么不响应编辑事件 if (node.isUseCustomNodeContent()) { return } - let { beforeTextEdit } = this.mindMap.opt + const { beforeTextEdit } = this.mindMap.opt if (typeof beforeTextEdit === 'function') { let isShow = false try { @@ -135,14 +151,21 @@ export default class TextEdit { if (!isShow) return } this.currentNode = node - let { offsetLeft, offsetTop } = checkNodeOuter(this.mindMap, node) + const { offsetLeft, offsetTop } = checkNodeOuter(this.mindMap, node) this.mindMap.view.translateXY(offsetLeft, offsetTop) - let rect = node._textData.node.node.getBoundingClientRect() + const rect = node._textData.node.node.getBoundingClientRect() + const params = { + node, + rect, + isInserting, + isFromKeyDown, + isFromScale + } if (this.mindMap.richText) { - this.mindMap.richText.showEditText(node, rect, isInserting, isFromKeyDown) + this.mindMap.richText.showEditText(params) return } - this.showEditTextBox(node, rect, isInserting, isFromKeyDown) + this.showEditTextBox(params) } // 处理画布缩放 @@ -156,15 +179,20 @@ export default class TextEdit { this.cacheEditingText = this.getEditText() this.showTextEdit = false } - this.show(this.currentNode) + this.show({ + node: this.currentNode, + isFromScale: true + }) } // 显示文本编辑框 - showEditTextBox(node, rect, isInserting, isFromKeyDown) { + showEditTextBox({ node, rect, isInserting, isFromKeyDown, isFromScale }) { if (this.showTextEdit) return const { nodeTextEditZIndex, textAutoWrapWidth, selectTextOnEnterEditText } = this.mindMap.opt - this.mindMap.emit('before_show_text_edit') + if (!isFromScale) { + this.mindMap.emit('before_show_text_edit') + } this.registerTmpShortcut() if (!this.textEditNode) { this.textEditNode = document.createElement('div') diff --git a/simple-mind-map/src/plugins/RichText.js b/simple-mind-map/src/plugins/RichText.js index 36c19d84..ff391fb9 100644 --- a/simple-mind-map/src/plugins/RichText.js +++ b/simple-mind-map/src/plugins/RichText.js @@ -153,7 +153,7 @@ class RichText { } // 显示文本编辑控件 - showEditText(node, rect, isInserting, isFromKeyDown) { + showEditText({ node, rect, isInserting, isFromKeyDown, isFromScale }) { if (this.showTextEdit) { return } @@ -167,7 +167,9 @@ class RichText { this.node = node this.isInserting = isInserting if (!rect) rect = node._textData.node.node.getBoundingClientRect() - this.mindMap.emit('before_show_text_edit') + if (!isFromScale) { + this.mindMap.emit('before_show_text_edit') + } this.mindMap.renderer.textEdit.registerTmpShortcut() // 原始宽高 let g = node._textData.node @@ -571,7 +573,7 @@ class RichText { setNotActiveNodeStyle(node, style) { const config = this.normalStyleToRichTextStyle(style) if (Object.keys(config).length > 0) { - this.showEditText(node) + this.showEditText({ node }) this.formatAllText(config) this.hideEditText([node]) }