canvas-mine 一个类似导图的东西,展示自己的所有东西

2023-07-13 14:45:59 +08:00
 kylebing

一个可以展示一个人所有东西的类似导图的 canvas

一、初衷

之前有一个想法,就是展示一个人所有的东西,铺在一个平面上。

我最初的想法其实是这样的,但一直没找到实现的方法就一直没开始:

二、实现过程

闲来无事,在研究 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},
    ]
},

其它可修改的配置,源文件中都有对应的注释。

四、目前的不足

目前没什么其它想法了,等有了再慢慢修改,反正最终的目标还是第一条中的那个目标。

954 次点击
所在节点    分享创造
5 条回复
senjyougahara
2023-07-13 14:51:53 +08:00
可以加个缩放拖拽功能,默认展示所有导图,可以进行缩放操作,拖拽移动
kylebing
2023-07-13 14:58:41 +08:00
@senjyougahara #1 这个不会有,只用于查看,不进行操作,也不会有滚动。就只当个图片用。
bangbo
2023-07-13 16:40:02 +08:00
挺有意思的😄
CHTuring
2023-07-13 16:50:54 +08:00
我用 markmap-lib 实现过一个同样的功能,不过不是手写
CHTuring
2023-07-13 16:51:57 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/956468

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX