我在造画布应用里最不显眼、也最难写对的那一层:选择、拖拽、吸附。
Selection · drag · snapping — the layer everyone feels but nobody sees.
selection-drag-engine · ★101JavaScript · rAF · zero-dep
渲染器无关的框选 + 多拖引擎:rAF 合并、拖拽快照、preview/commit 分离 —— 从 X6 #4823 长出来的实现。 |
mini-x6-go · 源码课JavaScript · SVG · ESM
从零长起来的小型图编辑器 / 元件设计器:纯 ES Module + 原生 SVG,零运行时依赖。 |
x6-plugin-port-editor · pluginTypeScript · X6 · plugin
点元件轮廓就地加引脚,落点贴真实 SVG 轮廓(直边 / 孔洞 / 异形 / 多图形拼合)。不改 X6 核心。 |
vite-plugin-font-subset · ★7Vite · WOFF2 · node
按项目实际用到的字符把字体裁成 WOFF2,构建期完成,产物直接瘦身。 |
🧩 还写过这些
| 项目 | 一句话 |
|---|---|
| miniVue | Vue 2.x 源码拆解:观察者、依赖收集、自定义回调 |
| css-pruner | 找出并删掉没人用的 CSS 选择器 |
| rusty-pic | Rust + WebAssembly 的极限图片压缩 |
| port-checker | Rust 写的查端口小工具 |
| go-concurrency-docs | Go 并发:goroutine / channel / mutex 的一整套例子 |
我给 antvis/X6 提过 issue 和实现思路,顺手把其中一块做成了独立引擎; 也在 varletjs/varlet 交过组件相关的 patch。 相信「顺手把上游修好」比「在本地绕过去」划算。




