diff --git a/README.md b/README.md index cc6c0df4..f09cb4d2 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ npm run build # 安装 -> 当前仓库版本:0.2.15,当前npm版本:0.2.15 +> 当前仓库版本:0.2.16,当前npm版本:0.2.16 ```bash npm i simple-mind-map @@ -205,31 +205,32 @@ v0.1.7+。切换模式为只读或编辑。 监听事件,事件列表: -| 事件名称 | 描述 | 回调参数 | -| ----------------------------- | ------------------------------------------ | ------------------------------------------------------------ | -| data_change | 渲染树数据变化,可以监听该方法获取最新数据 | data(当前渲染树数据) | -| view_data_change(v0.1.1+) | 视图变化数据,比如拖动或缩放时会触发 | data(当前视图状态数据) | -| back_forward | 前进或回退 | activeHistoryIndex(当前在历史数据数组里的索引)、length(当前历史数据数组的长度) | -| draw_click | *画布的单击事件* | e(事件对象) | -| svg_mousedown | svg画布的鼠标按下事件 | e(事件对象) | -| mousedown | el元素的鼠标按下事件 | e(事件对象)、this(Event事件类实例) | -| mousemove | el元素的鼠标移动事件 | e(事件对象)、this(Event事件类实例) | -| drag | 如果是按住左键拖动的话会触发拖动事件 | e(事件对象)、this(Event事件类实例) | -| mouseup | el元素的鼠标松开事件 | e(事件对象)、this(Event事件类实例) | -| mousewheel | 鼠标滚动事件 | e(事件对象)、dir(向上up还是向下down滚动)、this(Event事件类实例) | -| contextmenu | svg画布的鼠标右键菜单事件 | e(事件对象) | -| node_click | 节点的单击事件 | this(节点实例)、e(事件对象) | -| node_mousedown | 节点的鼠标按下事件 | this(节点实例)、e(事件对象) | -| node_mouseup | 节点的鼠标松开事件 | this(节点实例)、e(事件对象) | -| node_dblclick | 节点的双击事件 | this(节点实例)、e(事件对象) | -| node_contextmenu | 节点的右键菜单事件 | e(事件对象)、this(节点实例) | -| before_node_active | 节点激活前事件 | this(节点实例)、activeNodeList(当前激活的所有节点列表) | -| node_active | 节点激活事件 | this(节点实例)、activeNodeList(当前激活的所有节点列表) | -| expand_btn_click | 节点展开或收缩事件 | this(节点实例) | -| before_show_text_edit | 节点文本编辑框即将打开事件 | | -| hide_text_edit | 节点文本编辑框关闭事件 | textEditNode(文本编辑框DOM节点)、activeNodeList(当前激活的所有节点列表) | -| scale | 放大缩小事件 | scale(缩放比例) | -| node_img_dblclick(v0.2.15+) | 节点内图片的双击事件 | this(节点实例)、e(事件对象) | +| 事件名称 | 描述 | 回调参数 | +| -------------------------------- | ------------------------------------------ | ------------------------------------------------------------ | +| data_change | 渲染树数据变化,可以监听该方法获取最新数据 | data(当前渲染树数据) | +| view_data_change(v0.1.1+) | 视图变化数据,比如拖动或缩放时会触发 | data(当前视图状态数据) | +| back_forward | 前进或回退 | activeHistoryIndex(当前在历史数据数组里的索引)、length(当前历史数据数组的长度) | +| draw_click | *画布的单击事件* | e(事件对象) | +| svg_mousedown | svg画布的鼠标按下事件 | e(事件对象) | +| mousedown | el元素的鼠标按下事件 | e(事件对象)、this(Event事件类实例) | +| mousemove | el元素的鼠标移动事件 | e(事件对象)、this(Event事件类实例) | +| drag | 如果是按住左键拖动的话会触发拖动事件 | e(事件对象)、this(Event事件类实例) | +| mouseup | el元素的鼠标松开事件 | e(事件对象)、this(Event事件类实例) | +| mousewheel | 鼠标滚动事件 | e(事件对象)、dir(向上up还是向下down滚动)、this(Event事件类实例) | +| contextmenu | svg画布的鼠标右键菜单事件 | e(事件对象) | +| node_click | 节点的单击事件 | this(节点实例)、e(事件对象) | +| node_mousedown | 节点的鼠标按下事件 | this(节点实例)、e(事件对象) | +| node_mouseup | 节点的鼠标松开事件 | this(节点实例)、e(事件对象) | +| node_dblclick | 节点的双击事件 | this(节点实例)、e(事件对象) | +| node_contextmenu | 节点的右键菜单事件 | e(事件对象)、this(节点实例) | +| before_node_active | 节点激活前事件 | this(节点实例)、activeNodeList(当前激活的所有节点列表) | +| node_active | 节点激活事件 | this(节点实例)、activeNodeList(当前激活的所有节点列表) | +| expand_btn_click | 节点展开或收缩事件 | this(节点实例) | +| before_show_text_edit | 节点文本编辑框即将打开事件 | | +| hide_text_edit | 节点文本编辑框关闭事件 | textEditNode(文本编辑框DOM节点)、activeNodeList(当前激活的所有节点列表) | +| scale | 放大缩小事件 | scale(缩放比例) | +| node_img_dblclick(v0.2.15+) | 节点内图片的双击事件 | this(节点实例)、e(事件对象) | +| node_tree_render_end(v0.2.16+) | 节点树渲染完毕事件 | | #### emit(event, ...args) diff --git a/index.html b/index.html index c098abc8..c234e2f3 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -一个简单的web思维导图实现
\ No newline at end of file +一个简单的web思维导图实现
\ No newline at end of file diff --git a/simple-mind-map/package.json b/simple-mind-map/package.json index 7d62b0ba..a11e2561 100644 --- a/simple-mind-map/package.json +++ b/simple-mind-map/package.json @@ -1,6 +1,6 @@ { "name": "simple-mind-map", - "version": "0.2.15", + "version": "0.2.16", "description": "一个简单的web在线思维导图", "authors": [ { diff --git a/simple-mind-map/src/Node.js b/simple-mind-map/src/Node.js index b44501d7..364a53d6 100644 --- a/simple-mind-map/src/Node.js +++ b/simple-mind-map/src/Node.js @@ -754,7 +754,7 @@ class Node { * @Date: 2021-04-07 13:55:58 * @Desc: 递归渲染 */ - render() { + render(callback = () => {}) { // 节点 if (this.initRender) { this.initRender = false @@ -766,11 +766,19 @@ class Node { } // 子节点 if (this.children && this.children.length && this.nodeData.data.expand !== false) { + let index = 0 asyncRun(this.children.map((item) => { return () =>{ - item.render() + item.render(() => { + index++ + if (index >= this.children.length) { + callback() + } + }) } })) + } else { + callback() } // 手动插入的节点立即获得焦点并且开启编辑模式 if (this.nodeData.inserting) { diff --git a/simple-mind-map/src/Render.js b/simple-mind-map/src/Render.js index 33a09ca3..c4a18689 100644 --- a/simple-mind-map/src/Render.js +++ b/simple-mind-map/src/Render.js @@ -271,7 +271,9 @@ class Render { } this.layout.doLayout((root) => { this.root = root - this.root.render() + this.root.render(() => { + this.mindMap.emit('node_tree_render_end') + }) }) this.mindMap.emit('node_active', null, this.activeNodeList) } diff --git a/simple-mind-map/src/View.js b/simple-mind-map/src/View.js index 9bc9bfd5..d72f8e63 100644 --- a/simple-mind-map/src/View.js +++ b/simple-mind-map/src/View.js @@ -57,7 +57,9 @@ class View { if (this.firstDrag) { this.firstDrag = false // 清除激活节点 - this.mindMap.execCommand('CLEAR_ACTIVE_NODE') + if (this.mindMap.renderer.activeNodeList.length > 0) { + this.mindMap.execCommand('CLEAR_ACTIVE_NODE') + } } this.x = this.sx + event.mousemoveOffset.x this.y = this.sy + event.mousemoveOffset.y diff --git a/web/src/pages/Edit/components/Edit.vue b/web/src/pages/Edit/components/Edit.vue index a86aef79..5d7fdfb1 100644 --- a/web/src/pages/Edit/components/Edit.vue +++ b/web/src/pages/Edit/components/Edit.vue @@ -202,7 +202,8 @@ export default { 'expand_btn_click', 'svg_mousedown', 'mouseup', - 'mode_change' + 'mode_change', + 'node_tree_render_end' ].forEach((event) => { this.mindMap.on(event, (...args) => { this.$bus.$emit(event, ...args) diff --git a/web/src/pages/Edit/components/Navigator.vue b/web/src/pages/Edit/components/Navigator.vue index 96bde5c6..d9bad52b 100644 --- a/web/src/pages/Edit/components/Navigator.vue +++ b/web/src/pages/Edit/components/Navigator.vue @@ -47,12 +47,14 @@ export default { mounted() { this.$bus.$on("toggle_mini_map", this.toggle_mini_map); this.$bus.$on("data_change", this.data_change); - this.$bus.$on("view_data_change", this.view_data_change); + this.$bus.$on("view_data_change", this.data_change); + this.$bus.$on("node_tree_render_end", this.data_change); }, destroyed() { this.$bus.$off("toggle_mini_map", this.toggle_mini_map); this.$bus.$off("data_change", this.data_change); - this.$bus.$off("view_data_change", this.view_data_change); + this.$bus.$off("view_data_change", this.data_change); + this.$bus.$off("node_tree_render_end", this.data_change); }, methods: { toggle_mini_map(show) { @@ -75,15 +77,6 @@ export default { this.drawMiniMap(); }, 500); }, - view_data_change() { - if (!this.showMiniMap) { - return; - } - clearTimeout(this.timer); - this.timer = setTimeout(() => { - this.drawMiniMap(); - }, 500); - }, init() { let { width, height } = this.$refs.navigatorBox.getBoundingClientRect(); this.boxWidth = width;