<div class="container" id="containerA">
  <h2>Container A</h2>
  <div class="draggable" id="draggable" draggable="true">
    拖拉我!
  </div>
</div>

<div class="container" id="containerB">
  <h2>Container B</h2>
</div>
.container {
  width: 300px;
  height: 300px;
  border: 2px dashed #ccc;
  display: inline-block;
  vertical-align: top;
  margin-right: 20px;
  text-align: center;
  padding-top: 20px;
}

.draggable {
  width: 150px;
  height: 150px;
  background-color: #8e44ad; /* 紫色 */
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 10px;
  cursor: grab;
  user-select: none;
}

.draggable:active {
  cursor: grabbing;
}
const draggable = document.getElementById("draggable");
const containerA = document.getElementById("containerA");
const containerB = document.getElementById("containerB");

// 當元素開始被拖動
draggable.addEventListener("dragstart", (e) => {
  e.dataTransfer.setData("text/plain", e.target.id); // 傳遞被拖動元素的ID
});

// 許可容器A和容器B都可以放置元素
function allowDrop(event) {
  event.preventDefault(); // 必須阻止預設行為來允許放置
}

// 當元素被放置
function handleDrop(event, targetContainer) {
  event.preventDefault();
  const draggableId = event.dataTransfer.getData("text");
  const draggableElement = document.getElementById(draggableId);
  targetContainer.appendChild(draggableElement); // 將元素放到目標容器
}

// 允許 A 和 B 容器接受拖放
containerA.addEventListener("dragover", allowDrop);
containerB.addEventListener("dragover", allowDrop);

// 在 A 和 B 容器上放置元素
containerA.addEventListener("drop", (e) => handleDrop(e, containerA));
containerB.addEventListener("drop", (e) => handleDrop(e, containerB));

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.