Feat:1.只有当按键事件的事件目标为body或节点文本编辑框元素时才响应快捷键事件;2.新增自定义响应快捷键事件的实例化选项
This commit is contained in:
parent
e769c9602b
commit
fa7761b5a3
@ -75,6 +75,10 @@ export const CONSTANTS = {
|
|||||||
TAG_POSITION: {
|
TAG_POSITION: {
|
||||||
RIGHT: 'right',
|
RIGHT: 'right',
|
||||||
BOTTOM: 'bottom'
|
BOTTOM: 'bottom'
|
||||||
|
},
|
||||||
|
EDIT_NODE_CLASS: {
|
||||||
|
SMM_NODE_EDIT_WRAP: 'smm-node-edit-wrap',
|
||||||
|
RICH_TEXT_EDIT_WRAP: 'ql-editor'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -84,6 +84,9 @@ export const defaultOpt = {
|
|||||||
isShowExpandNum: true,
|
isShowExpandNum: true,
|
||||||
// 是否只有当鼠标在画布内才响应快捷键事件
|
// 是否只有当鼠标在画布内才响应快捷键事件
|
||||||
enableShortcutOnlyWhenMouseInSvg: true,
|
enableShortcutOnlyWhenMouseInSvg: true,
|
||||||
|
// 自定义判断是否响应快捷键事件,优先级比enableShortcutOnlyWhenMouseInSvg选项高
|
||||||
|
// 可以传递一个函数,接收事件对象e为参数,需要返回true或false,返回true代表允许响应快捷键事件,反之不允许,库默认当事件目标为body,或为文本编辑框元素时响应快捷键,其他不响应
|
||||||
|
customCheckEnableShortcut: null,
|
||||||
// 初始根节点的位置
|
// 初始根节点的位置
|
||||||
initRootNodePosition: null,
|
initRootNodePosition: null,
|
||||||
// 节点文本编辑框的z-index
|
// 节点文本编辑框的z-index
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { keyMap } from './keyMap'
|
import { keyMap } from './keyMap'
|
||||||
|
import { CONSTANTS } from '../../constants/constant'
|
||||||
|
|
||||||
// 快捷按键、命令处理类
|
// 快捷按键、命令处理类
|
||||||
export default class KeyCommand {
|
export default class KeyCommand {
|
||||||
@ -73,10 +74,28 @@ export default class KeyCommand {
|
|||||||
window.removeEventListener('keydown', this.onKeydown)
|
window.removeEventListener('keydown', this.onKeydown)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据事件目标判断是否响应快捷键事件
|
||||||
|
defaultEnableCheck(e) {
|
||||||
|
const target = e.target
|
||||||
|
return (
|
||||||
|
target === document.body ||
|
||||||
|
target.classList.contains(CONSTANTS.EDIT_NODE_CLASS.SMM_NODE_EDIT_WRAP) ||
|
||||||
|
target.classList.contains(CONSTANTS.EDIT_NODE_CLASS.RICH_TEXT_EDIT_WRAP)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// 按键事件
|
// 按键事件
|
||||||
onKeydown(e) {
|
onKeydown(e) {
|
||||||
const { enableShortcutOnlyWhenMouseInSvg, beforeShortcutRun } =
|
const {
|
||||||
this.mindMap.opt
|
enableShortcutOnlyWhenMouseInSvg,
|
||||||
|
beforeShortcutRun,
|
||||||
|
customCheckEnableShortcut
|
||||||
|
} = this.mindMap.opt
|
||||||
|
const checkFn =
|
||||||
|
typeof customCheckEnableShortcut === 'function'
|
||||||
|
? customCheckEnableShortcut
|
||||||
|
: this.defaultEnableCheck
|
||||||
|
if (!checkFn(e)) return
|
||||||
if (this.isPause || (enableShortcutOnlyWhenMouseInSvg && !this.isInSvg)) {
|
if (this.isPause || (enableShortcutOnlyWhenMouseInSvg && !this.isInSvg)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -101,7 +101,7 @@ class RichText {
|
|||||||
`
|
`
|
||||||
)
|
)
|
||||||
let cssText = `
|
let cssText = `
|
||||||
.ql-editor {
|
.${CONSTANTS.EDIT_NODE_CLASS.RICH_TEXT_EDIT_WRAP} {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
height: auto;
|
height: auto;
|
||||||
@ -297,7 +297,9 @@ class RichText {
|
|||||||
this.textEditNode.innerHTML = this.cacheEditingText || nodeText
|
this.textEditNode.innerHTML = this.cacheEditingText || nodeText
|
||||||
}
|
}
|
||||||
this.initQuillEditor()
|
this.initQuillEditor()
|
||||||
document.querySelector('.ql-editor').style.minHeight = originHeight + 'px'
|
document.querySelector(
|
||||||
|
'.' + CONSTANTS.EDIT_NODE_CLASS.RICH_TEXT_EDIT_WRAP
|
||||||
|
).style.minHeight = originHeight + 'px'
|
||||||
this.showTextEdit = true
|
this.showTextEdit = true
|
||||||
// 如果是刚创建的节点,那么默认全选,否则普通激活不全选,除非selectTextOnEnterEditText配置为true
|
// 如果是刚创建的节点,那么默认全选,否则普通激活不全选,除非selectTextOnEnterEditText配置为true
|
||||||
// 在selectTextOnEnterEditText时,如果是在keydown事件进入的节点编辑,也不需要全选
|
// 在selectTextOnEnterEditText时,如果是在keydown事件进入的节点编辑,也不需要全选
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user