Files
mind-map/docs/web思维导图实现的技术点分析.md
wanglin2 a06cb2e031 重构
2021-06-19 14:04:05 +08:00

94 lines
2.5 KiB
Markdown

![](./assets/swdt.jpg)
# 简介
思维导图是一种常见的表达发散性思维的有效工具,市面上有非常多的工具可以用来画思维导图,百度一下,整页都是广告可供选择,此外也有一些可以用来帮助快速实现的`JavaScript`类库,如:[jsMind](https://github.com/hizzgdev/jsmind)、[KityMinder](https://github.com/fex-team/kityminder)。
本文会介绍如何从头实现一个简易的思维导图。
# 技术选型
这种图形类的绘制一般有两种选择,`svg``canvas`,因为思维导图主要是节点与线的连接,使用与`html`比较接近的`svg`比较好操作,`svg`类库也有挺多,在试用了[svgjs](https://svgjs.dev/docs/3.0/)和[snap](http://snapsvg.io/)后,有些需求在`snap`里没有找到对应的方法,所以最终选择了`svgjs`,视图库使用的是`vue2.x`全家桶。
# 数据结构
这里主要指每个节点的数据结构,大概需要包含是否是根节点、节点层级、节点内容(包括文本、图片、图标等固定格式)、节点展开状态、子节点、父节点等等,此外还包括该节点的特定样式,用来覆盖主题的默认样式:
```js
```
每次操作都会修改这份配置数据,然后整体刷新,有点数据驱动的意思,好处很明显,只用维护数据就行了,不用陷入对视图的操作。
# 逻辑结构图
思维导图常见的有几种变种,我们先看最基础的【逻辑结构图】如何布局,其他的可以在末尾小节查看。
## 节点定位
## 节点连线
# 支持图片、图标
# 展开收缩
# 文字编辑
# 拖动、放大缩小
# 主题
# 节点样式编辑
# 快捷键
快捷键就是监听了到特定的按键来执行特定的操作,包含单个按键和组合键,我们可以使用一个对象来保存快捷键和对应的命令,`key`代表按键,`value`代表要执行的命令,比如:
```js
const shortcutKeys = {
'enter': 'addSiblingNode',
'ctrl+b': 'bold'
}
```
包含两种类型,单个按键、以`+`拼接的组合键,接下来只要监听`keydown`事件来检查即可,首先要说明的是组合键一般指的是`ctrl``alt``shift`
# 实现过渡效果
# 回退
# 导入导出、其他格式
https://github.com/canvg/canvg
https://github.com/fex-team/kityminder/tree/dev/src/protocol
https://github.com/fex-team/kityminder/tree/dev/native-support
json、freemind、xmind
png、svg
# 其他几种变种结构
逻辑结构图、鱼骨图、思维导图、组织结构图、目录组织图