之前有一个想法,就是展示一个人所有的东西,铺在一个平面上。
我最初的想法其实是这样的,但一直没找到实现的方法就一直没开始:
闲来无事,在研究 canvas 的相关方法时看到了 arcTo()
这个方法。
当研究明白之后就做了一个曲线,之后就发现完全可以延伸这个来实现之前的那个想法。
原理图
一条线,两条线,三条线,越做越多,就实现了现在这个样子
由于之前做过一些小东西,后来发现整个创作的过程如果记录下来还是挺有意思的,于是在这个诞生的过程中把每个变化都记录了下来。
它的缩略过程是这样的:GIF
它的详细过程是这样的:
参考:MDN CanvasRenderingContext2D 相关属性
总结:Canvas.arcTo() 的使用,画一条带圆角的线段
github 地址:
我比较喜欢这个由数据转换成图像的过程,比自己拖动导图要更爽一些。
如果感觉有点意思想自己试一下,可以下载这个项目下来填入自己的数据试试看。
由于它是个 canvas ,所以如果你想保存它,可以直接鼠标右击选择保存图片。
它的参数是这样的:
/**
* CanvasMine
* @param name {String}主题名
* @param attaches {[]} 内容
* @param columnCount {Number} 展示为多少列
* @param columnOffsetX {Number} 列之间的间隔
* @param isShowSerialNumber {Boolean} 是否显示序号
* @param isShowCanvasInfo {Boolean} 是否显示 canvas 信息
*/
constructor(
name,
attaches,
columnCount,
columnOffsetX,
isShowSerialNumber,
isShowCanvasInfo
)
内容数据是这样的:
{
name: '证件',
isImportant: false,
children: [
{name: '身份证', isImportant: false},
{name: '驾驶证 C1D', isImportant: false},
]
},
其它可修改的配置,源文件中都有对应的注释。
目前没什么其它想法了,等有了再慢慢修改,反正最终的目标还是第一条中的那个目标。
1
senjyougahara 2023-07-13 14:51:53 +08:00
可以加个缩放拖拽功能,默认展示所有导图,可以进行缩放操作,拖拽移动
|
2
kylebing OP @senjyougahara #1 这个不会有,只用于查看,不进行操作,也不会有滚动。就只当个图片用。
|
3
bangbo 2023-07-13 16:40:02 +08:00
挺有意思的😄
|
4
CHTuring 2023-07-13 16:50:54 +08:00
我用 markmap-lib 实现过一个同样的功能,不过不是手写
|
5
CHTuring 2023-07-13 16:51:57 +08:00
|