V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
kylebing
V2EX  ›  分享创造

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

  •  1
     
  •   kylebing ·
    KyleBing · 304 天前 · 812 次点击
    这是一个创建于 304 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    image

    一、初衷

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

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

    mine

    二、实现过程

    闲来无事,在研究 canvas 的相关方法时看到了 arcTo() 这个方法。
    当研究明白之后就做了一个曲线,之后就发现完全可以延伸这个来实现之前的那个想法。

    原理图

    image

    一条线,两条线,三条线,越做越多,就实现了现在这个样子

    2023-07-13 10 39 23

    由于之前做过一些小东西,后来发现整个创作的过程如果记录下来还是挺有意思的,于是在这个诞生的过程中把每个变化都记录了下来。

    它的缩略过程是这样的: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},
        ]
    },
    

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

    四、目前的不足

    • 只显示在 1920x1080 的屏幕上,因为我想让它一下子全出来,所以不会有滚动操作。
    • 无法自动调整字体大小。
    • 无法自动调整布局,需要手工指定显示多少列,每列之间的间隔是多少。

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

    senjyougahara
        1
    senjyougahara  
       304 天前
    可以加个缩放拖拽功能,默认展示所有导图,可以进行缩放操作,拖拽移动
    kylebing
        2
    kylebing  
    OP
       304 天前
    @senjyougahara #1 这个不会有,只用于查看,不进行操作,也不会有滚动。就只当个图片用。
    bangbo
        3
    bangbo  
       304 天前
    挺有意思的😄
    CHTuring
        4
    CHTuring  
       304 天前
    我用 markmap-lib 实现过一个同样的功能,不过不是手写
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2718 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:30 · PVG 18:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.