You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTML拖拽功能疑问:无法将元素拖回初始位置

实现拖拽元素双向移动(拖回初始位置)的解决方案

嘿,我来帮你搞定把元素拖回初始位置的问题!你的现有代码已经实现了单向拖拽,但要让元素能来回拖,核心是给图片的初始位置也设置一个可放置的容器,同时确保拖拽逻辑支持双向移动。

问题分析

你当前的代码里,只有div1是可放置区域,图片的初始位置没有被标记为可放置容器,所以拖到div1之后,没法再拖回去。咱们只需要给初始位置也加一个可放置容器,再稍微调整下逻辑(其实逻辑本身已经支持移动元素,因为appendChild会自动把元素从原父节点移到新节点)。

完整实现代码

<!DOCTYPE html>
<html>
<head>
<style>
#div1, #div2 {
  width: 350px;
  height: 70px;
  padding: 10px;
  border: 1px solid #aaaaaa;
  margin-bottom: 10px;
}
</style>
</head>
<body>

<p>拖拽图片在两个矩形之间来回移动:</p>
<!-- 初始位置的可放置容器 -->
<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">
  <img id="drag1" src="https://d2elkgkdx2cp5d.cloudfront.net/assets/hubstaff/logos/HS_text_logo_black-18504e00c286dca13b2c503b94d1eabdf6e1c45257ca558b78095c4e184a020c.svg" draggable="true" ondragstart="drag(event)" width="336" height="69">
</div>
<!-- 目标位置的可放置容器 -->
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<script>
function allowDrop(ev) {
  ev.preventDefault();
}

function drag(ev) {
  ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  // 这里的appendChild会自动把元素从原父节点移除,添加到新容器里
  ev.target.appendChild(document.getElementById(data));
}
</script>

</body>
</html>

关键说明

  • 新增了div2作为图片的初始可放置容器,和div1一样绑定了ondrop和ondragover事件
  • drop函数里的appendChild方法本身就具备移动元素的能力:当你把元素添加到新容器时,它会自动从原来的父容器中移除,所以不需要额外写移除逻辑
  • 两个容器的样式保持一致,方便用户识别可放置区域

这样修改后,你就能把图片在div1和div2之间来回拖拽啦!

内容的提问来源于stack exchange,提问作者TSCAmerica.com

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:47:58