0Pricing
JavaScript Academy · 课时

让元素可拖动

启用拖动并处理拖动事件。

让元素可拖动 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 4 节课。

HTML 拖放 API

原生的拖放 API允许用户抓取元素并将其放到其他位置。它由事件驱动:源元素会触发拖动事件,放置目标也会触发自己的事件。无需使用库。

draggable 属性

默认情况下,只有链接和图像可以拖动。添加 draggable="true" 即可让任意元素支持拖动。

<div draggable="true" id="card">Drag me</div>

在 JS 中设置 draggable

您可以通过 draggable 属性在脚本中切换此行为。

const card = document.getElementById("card");
card.draggable = true;

dragstart 事件

dragstart 会在拖动开始的瞬间触发。您可以在这里记录正在拖动的内容。

card.addEventListener("dragstart", (e) => {
  console.log("Started dragging", card.id);
});

使用 dataTransfer 携带数据

事件会提供 dataTransfer。请在 dragstart 中使用 setData(format, value) 附加载荷,使其随拖动过程传递。

card.addEventListener("dragstart", (e) => {
  e.dataTransfer.setData("text/plain", card.id);
});

drag 事件

元素移动期间会持续触发 drag。请谨慎使用,因为它每秒可能触发多次。

card.addEventListener("drag", (e) => {
  // fires repeatedly during the drag
});

dragend 事件

用户释放鼠标时会触发 dragend,无论放置是否成功。请使用它重置源元素的样式。

card.addEventListener("dragend", (e) => {
  card.classList.remove("dragging");
});

标记源元素

一种常见模式是:在 dragstart 时添加一个类,并在 dragend 时移除它,从而使被拖动的项目变暗或突出显示。

card.addEventListener("dragstart", () => card.classList.add("dragging"));
card.addEventListener("dragend", () => card.classList.remove("dragging"));

允许的效果

在 dragstart 中设置 effectAllowed,声明哪些操作有效:"copy"、"move"、"link" 或它们的组合。

card.addEventListener("dragstart", (e) => {
  e.dataTransfer.effectAllowed = "move";
});

触摸设备注意事项

原生 API 在移动设备上的触摸支持有限。对于触摸优先的应用,请考虑使用指针事件或专用库;原生 API 在桌面设备上更具优势。

禁用文本选择

拖动时可能会意外选中文本。一条简短的 CSS 规则即可让拖动过程保持整洁。

/* CSS */
.draggable { user-select: none; }

快速检查

测试可拖动功能的基础知识。

回顾:让元素支持拖动

您使用 draggable="true" 启用了拖动,处理了 dragstart/drag/dragend,通过 dataTransfer.setData 附加了载荷,设置了 effectAllowed,并为源元素设置了样式。下一步:放置目标。

常见问题解答

「让元素可拖动」课时是免费的吗?

是的 — 「让元素可拖动」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 4 节课。

「让元素可拖动」这节课中我会学到什么?

启用拖动并处理拖动事件。 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 JavaScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「让元素可拖动」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 JavaScript Academy 课中编写并运行代码吗?

能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 让元素可拖动
  2. 放置目标与 dataTransfer
  3. 拖动过程中的视觉反馈
  4. 将文件拖入页面
← 返回 JavaScript Academy