码上问学问代码之理,学编程之道

案例 · 协作白板(Loom 风格 v1)

复刻一个产品团队在线白板的主界面:便签、连线、分组、投票,还有几位同事的光标带着名字在画布上移动。 这是「新用户的第一天」需求讨论现场——所有便签内容都是真实可改的。下面这块白板是完全可交互的:拖拽便签、框选多张、给便签投票、看同事「当场」投票与移动光标。

这是 v1 基础版(教学演示)。它把一份设计挑战题「Loom Whiteboard」落地成纯静态站点里可运行的模块:练习 DOM 操作、事件委托、拖拽、SVG 连线、requestAnimationFrame 动画、contenteditable 与选区框选。同事光标与自动投票是模拟的协作效果(演示用),并非真实多人服务。
工具 在线
已选 0 张便签 · 总票数 0 · 提示:在空白处拖拽可框选,点便签头部可拖动,双击便签正文可编辑。

截图预览 · 选中的便签

还没有选中任何便签。

这个案例练到了哪些课的知识点

网站开发 · JS 事件

mousedown / mousemove / mouseup 事件委托,区分点击、拖拽与框选三种交互。

网站开发 · DOM 操作

用数据驱动生成便签元素,按 id 维护引用,局部更新票数而非整页重绘。

网站开发 · SVG

连线层用 SVG 线段绘制,便签移动时实时重算坐标,练习坐标准换。

网站开发 · 动画

用 requestAnimationFrame 让同事光标平滑巡游,练习帧循环与插值。

网站开发 · 内容可编辑

便签正文用 contenteditable,双击即可改字,理解富交互组件的状态。

全栈开发 · 响应式思路

票数、选区、协作者在线状态都可抽象为「状态 → 视图」,对应 Vue 的数据驱动。