web思维导图库对比
背景
某项目在演示过程中客户提出需要一个可在线查看类似xmind思维导图的功能。
技术选型
先简单分下如果手动实现一个思维导图需要用到什么技术。这种图形类的绘制一般有两种选择:svg和canvas,因为思维导图主要是节点与线的连接,使用与html比较接近的svg比较容易操作。成熟的svg库有很多,比如RaphaelJS
、svgjs
和snap
。
由于要快速交付同时能力有限,主要考虑使用成熟开源的框架来实现对应功能。思维导图主要功能点包括下列几个方面
- 编辑节点(添加、删除、收缩、文字编辑等等)
- 选择节点(单选、多选)
- 画布操作(放大、缩小,拖拽、撤销重做)
- 功能丰富度(标签、关联线等等)
1、X6
首先想到的就是阿里的X6
图编辑引擎,在公司其他项目中有用到这个库所以相对比较熟悉。它里面内置了一些常用的图扩展包括思维导图
优点:
- 实现简单:但是官方提供对应的示例让我们可以轻松的实现思维导图功能
- 可定制化程度高
缺点:
- 功能较少
- 丰富功能需要一定的编码能力
2、jsmind
这是项目经理提供的一个选择,是基于html5 canvas 和 svg的思维导图类库
使用也能简单传入支持的3种数据格式中一种就可以得到一个只读的思维导图,想要编辑功能需要通过API手动实现。
1 | <html> |
优点:
- 兼容性好
- 支持图片节点
缺点:
- 功能较少
- 界面美观度一般
3、vue3-mindmap
Vue3的思维导图组件
使用特别简单直接引入即可
1 | <template> |
优点:
- 使用简单,功能相对齐全
缺点:
- 停止更新
- 强依赖vue3(虽然在本项目中不算缺点)
- 不可扩展
4、mind-elixir-core
一个无框架依赖的思维导图内核
优点:
- 使用简单,功能相对齐全
- 支持关联和汇总节点
- 可自定义每个节点样式
- 支持插件,可自定义功能
缺点:
- 右键拖动画布,有点反常规
- 文档简陋
5、mind-map
一个还算强大的Web思维导图
xmind文件
JSON文件
优点:
- 相对齐全的思维导图功能(目前几个开源框架中功能最多的)
- 支持读取和导出XMind文件
- 支持协同编辑和演示模式
- 定制化程度高
- 文档完善
缺点:
- 并没有提供一个完整思维导图,需要根据提供的接口来实现更多功能(项目附带一个vue2+elementui实现的完整思维导图)
- 不支持概要节点后面继续添加节点
- 不支持多个根节点
- 导入xmind文件会丢失关联线(JSON文件并不会)
6、mindmaptree
一个基于web(svg)的思维导图
1 | <body> |
优点:
- 使用简单
缺点:
- 功能较少
- 需要选中根节点才能拖拽画布
- 不可扩展
- 文档简陋不全
结论
首先不考虑jsMind
,毕竟美观是影响人的第一要数,剩下的需要根据具体需求的不同来取舍。
比如只需要可编辑节点文本,无其他复杂逻辑的思维导图,这时可以选择X6
,如果是用的Vue3框架就用vue3-mindmap
再比如需求是一个完整的思维导图,那完全可以选择mind-map
和mind-elixir-core
。同样视功能点和排期的不同,它两之间还可以再做区分。(对功能点的细节要求不高可以用mind-elixir-core
)。
总的来说在开源的思维导图里,mind-map
可能相对好用些。
以上~~