From 853b999a7dda93b08b9dff4d93119916651b6292 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Fri, 7 Apr 2023 08:42:27 +0800 Subject: [PATCH] =?UTF-8?q?Feature=EF=BC=9A=E6=94=AF=E6=8C=81=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=88=9D=E5=A7=8B=E4=B8=AD=E5=BF=83=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E7=9A=84=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/index.js | 4 +++- simple-mind-map/src/layouts/Base.js | 24 +++++++++++++++++++++--- simple-mind-map/src/utils/constant.js | 15 +++++++++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index c7cdca74..6bad7092 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -88,7 +88,9 @@ const defaultOpt = { // 是否开启节点动画过渡 enableNodeTransitionMove: true, // 如果开启节点动画过渡,可以通过该属性设置过渡的时间,单位ms - nodeTransitionMoveDuration: 300 + nodeTransitionMoveDuration: 300, + // 初始根节点的位置 + initRootNodePosition: [CONSTANTS.INIT_ROOT_NODE_POSITION.CENTER, CONSTANTS.INIT_ROOT_NODE_POSITION.CENTER] } // 思维导图 diff --git a/simple-mind-map/src/layouts/Base.js b/simple-mind-map/src/layouts/Base.js index 0111c33a..dd6e1679 100644 --- a/simple-mind-map/src/layouts/Base.js +++ b/simple-mind-map/src/layouts/Base.js @@ -1,5 +1,5 @@ import Node from '../Node' -import { CONSTANTS } from '../utils/constant' +import { CONSTANTS, initRootNodePositionMap } from '../utils/constant' // 布局基类 class Base { @@ -122,10 +122,28 @@ class Base { return newNode } + // 格式化节点位置 + formatPosition(value, size, nodeSize) { + if (typeof value === 'number') { + return value + } else if (initRootNodePositionMap[value] !== undefined) { + return size * initRootNodePositionMap[value] + } else if (/^\d\d*%$/.test(value)) { + return Number.parseFloat(value) / 100 * size + } else { + return (size - nodeSize) / 2 + } + } + // 定位节点到画布中间 setNodeCenter(node) { - node.left = (this.mindMap.width - node.width) / 2 - node.top = (this.mindMap.height - node.height) / 2 + let { initRootNodePosition } = this.mindMap.opt + let { CENTER }= CONSTANTS.INIT_ROOT_NODE_POSITION + if (!initRootNodePosition || !Array.isArray(initRootNodePosition) || initRootNodePosition.length < 2) { + initRootNodePosition = [CENTER, CENTER] + } + node.left = this.formatPosition(initRootNodePosition[0], this.mindMap.width, node.width) + node.top = this.formatPosition(initRootNodePosition[1], this.mindMap.height, node.height) } // 更新子节点属性 diff --git a/simple-mind-map/src/utils/constant.js b/simple-mind-map/src/utils/constant.js index 795fa79b..dc725247 100644 --- a/simple-mind-map/src/utils/constant.js +++ b/simple-mind-map/src/utils/constant.js @@ -154,9 +154,24 @@ export const CONSTANTS = { MOUSE_WHEEL_ACTION: { ZOOM: 'zoom', MOVE: 'move' + }, + INIT_ROOT_NODE_POSITION: { + LEFT: 'left', + TOP: 'top', + RIGHT: 'right', + BOTTOM: 'bottom', + CENTER: 'center' } } +export const initRootNodePositionMap = { + [CONSTANTS.INIT_ROOT_NODE_POSITION.LEFT]: 0, + [CONSTANTS.INIT_ROOT_NODE_POSITION.TOP]: 0, + [CONSTANTS.INIT_ROOT_NODE_POSITION.RIGHT]: 1, + [CONSTANTS.INIT_ROOT_NODE_POSITION.BOTTOM]: 1, + [CONSTANTS.INIT_ROOT_NODE_POSITION.CENTER]: 0.5, +} + // 布局结构列表 export const layoutList = [ {