看板卡片拖放
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/lk2026582。
技能介绍
要解决的问题
原生 HTML5 拖拽 API 只抛出一次 drop 事件,卡片在松手前不会跟着指针移动,也没有边界限制、惯性和坐标回写。而完整的 DnD 框架动辄几十 kB,只为了让看板卡片换一列,代价偏高。这个技能把 interact.js 的拖拽能力封装成一条可落地的链路:卡片节点 → interact().draggable() → 松手回写坐标或列,适合 Demo 验证和轻量自由摆放场景。
技能如何工作
核心依赖只有 interactjs 一项。每张卡片挂载时注册为 draggable,onEnd 回调中把新阶段或坐标交回业务层,由业务层决定换列还是仅保存位置。组件卸载时调用 destroy,对应 interact 实例的 unset(),避免监听器残留。
关键步骤:
- 每张卡片独立挂载,拖拽结束必须回调业务逻辑(换列或存坐标),技能本身不托管业务状态。
- 卸载路径与挂载路径对称,在
onBeforeUnmount中调destroy。 - 实现要点处用 小四原创 标注,便于回溯原创写法。
适用边界与注意点
它只处理单端拖拽,不含协同看板与多人冲突合并,不要直接用于在线协作。两个高频坑:一是与 AutoAnimate 叠用时位置错乱,需先排查动画层;二是忘记 unset 造成重复绑定,表现为同一张卡片响应两次拖拽。与原生滚动共存时,用 ignoreFrom 排除卡片内的可滚动区域即可。
使用场景
- 验收商机看板 Demo 时,需要把卡片从「待跟进」拖到「已成交」并保存列归属
- 实现项目任务卡片自由摆放,拖动结束后把坐标写回本地存储
- 在运营活动看板里让卡片跨列移动,但不想引入完整的拖拽框架
- 区分卡片内滚动区域与拖拽区域,避免原生滚动和拖动互相冲突
适合人员
- 前端工程师:需要快速实现看板拖拽交互,又不想为此引入重型 DnD 库
- React 组件开发者:负责卡片列表,必须在卸载时清理 interact 实例避免重复绑定
- 交互原型作者:用 Demo 验证多列卡片换位逻辑,关注 onEnd 回调能否拿到坐标
- 技术负责人:为看板模块选型,需要评估 interact.js 方案与自研原生拖拽的成本