Fix:1.按住Ctrl键时禁用节点双击事件;2.优化节点激活事件的派发,激活节点未改变时不派发事件,短时间派发多次事件时跳过中间事件
This commit is contained in:
parent
a0f56473ee
commit
70c32e3c74
@ -25,7 +25,8 @@ import {
|
|||||||
setDataToClipboard,
|
setDataToClipboard,
|
||||||
getDataFromClipboard,
|
getDataFromClipboard,
|
||||||
htmlEscape,
|
htmlEscape,
|
||||||
parseAddGeneralizationNodeList
|
parseAddGeneralizationNodeList,
|
||||||
|
checkNodeListIsEqual
|
||||||
} from '../../utils'
|
} from '../../utils'
|
||||||
import { shapeList } from './node/Shape'
|
import { shapeList } from './node/Shape'
|
||||||
import { lineStyleProps } from '../../themes/default'
|
import { lineStyleProps } from '../../themes/default'
|
||||||
@ -87,6 +88,9 @@ class Render {
|
|||||||
this.currentBeingPasteType = ''
|
this.currentBeingPasteType = ''
|
||||||
// 节点高亮框
|
// 节点高亮框
|
||||||
this.highlightBoxNode = null
|
this.highlightBoxNode = null
|
||||||
|
// 上一次节点激活数据
|
||||||
|
this.lastActiveNode = null
|
||||||
|
this.lastActiveNodeList = []
|
||||||
// 布局
|
// 布局
|
||||||
this.setLayout()
|
this.setLayout()
|
||||||
// 绑定事件
|
// 绑定事件
|
||||||
@ -335,6 +339,24 @@ class Render {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 派发节点激活事件
|
||||||
|
emitNodeActiveEvent(node = null, activeNodeList = [...this.activeNodeList]) {
|
||||||
|
let isChange = false
|
||||||
|
isChange = this.lastActiveNode !== node
|
||||||
|
if (!isChange) {
|
||||||
|
isChange = !checkNodeListIsEqual(
|
||||||
|
this.lastActiveNodeList,
|
||||||
|
activeNodeList
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (!isChange) return
|
||||||
|
this.lastActiveNode = node
|
||||||
|
this.lastActiveNodeList = [...activeNodeList]
|
||||||
|
this.mindMap.batchExecution.push('emitNodeActiveEvent', () => {
|
||||||
|
this.mindMap.emit('node_active', node, activeNodeList)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 鼠标点击画布时清空当前激活节点列表
|
// 鼠标点击画布时清空当前激活节点列表
|
||||||
clearActiveNodeListOnDrawClick(e, eventType) {
|
clearActiveNodeListOnDrawClick(e, eventType) {
|
||||||
if (this.activeNodeList.length <= 0) return
|
if (this.activeNodeList.length <= 0) return
|
||||||
@ -431,7 +453,7 @@ class Render {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.clearActiveNodeList()
|
this.clearActiveNodeList()
|
||||||
this.mindMap.emit('node_active', null, [])
|
this.emitNodeActiveEvent(null, [])
|
||||||
}
|
}
|
||||||
|
|
||||||
// 清除当前激活的节点列表
|
// 清除当前激活的节点列表
|
||||||
@ -1602,11 +1624,6 @@ class Render {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
// 派发节点激活改变事件
|
|
||||||
emitNodeActiveEvent() {
|
|
||||||
this.mindMap.emit('node_active', null, [...this.activeNodeList])
|
|
||||||
}
|
|
||||||
|
|
||||||
// 高亮节点或子节点
|
// 高亮节点或子节点
|
||||||
highlightNode(node, range) {
|
highlightNode(node, range) {
|
||||||
const { highlightNodeBoxStyle = {} } = this.mindMap.opt
|
const { highlightNodeBoxStyle = {} } = this.mindMap.opt
|
||||||
|
|||||||
@ -442,9 +442,7 @@ class Node {
|
|||||||
this.mindMap.renderer[
|
this.mindMap.renderer[
|
||||||
isActive ? 'removeNodeFromActiveList' : 'addNodeToActiveList'
|
isActive ? 'removeNodeFromActiveList' : 'addNodeToActiveList'
|
||||||
](this)
|
](this)
|
||||||
this.mindMap.emit('node_active', isActive ? null : this, [
|
this.renderer.emitNodeActiveEvent(isActive ? null : this)
|
||||||
...this.mindMap.renderer.activeNodeList
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
this.mindMap.emit('node_mousedown', this, e)
|
this.mindMap.emit('node_mousedown', this, e)
|
||||||
})
|
})
|
||||||
@ -475,7 +473,7 @@ class Node {
|
|||||||
})
|
})
|
||||||
// 双击事件
|
// 双击事件
|
||||||
this.group.on('dblclick', e => {
|
this.group.on('dblclick', e => {
|
||||||
if (this.mindMap.opt.readonly) {
|
if (this.mindMap.opt.readonly || e.ctrlKey) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
@ -521,7 +519,7 @@ class Node {
|
|||||||
this.mindMap.emit('before_node_active', this, this.renderer.activeNodeList)
|
this.mindMap.emit('before_node_active', this, this.renderer.activeNodeList)
|
||||||
this.renderer.clearActiveNodeList()
|
this.renderer.clearActiveNodeList()
|
||||||
this.renderer.addNodeToActiveList(this)
|
this.renderer.addNodeToActiveList(this)
|
||||||
this.mindMap.emit('node_active', this, [...this.renderer.activeNodeList])
|
this.renderer.emitNodeActiveEvent(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新节点
|
// 更新节点
|
||||||
|
|||||||
@ -133,9 +133,7 @@ class Select {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isNumChange || isNodeChange) {
|
if (isNumChange || isNodeChange) {
|
||||||
this.mindMap.emit('node_active', null, [
|
this.mindMap.renderer.emitNodeActiveEvent()
|
||||||
...this.mindMap.renderer.activeNodeList
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1003,3 +1003,18 @@ export const handleSelfCloseTags = str => {
|
|||||||
})
|
})
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查两个节点列表是否包含的节点是一样的
|
||||||
|
export const checkNodeListIsEqual = (list1, list2) => {
|
||||||
|
if (list1.length !== list2.length) return false
|
||||||
|
for (let i = 0; i < list1.length; i++) {
|
||||||
|
if (
|
||||||
|
!list2.find(item => {
|
||||||
|
return item.uid === list1[i].uid
|
||||||
|
})
|
||||||
|
) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user