javascript - JavaScript 中拖放功能的问题

标签 javascript html css

我有一个 JavaScript 拖放代码,

我有两个用于放置的类 div1 和用于拖动的 div2

我已经根据viewport widthheight在CSS中设置了这两个类的position,并且是强制性的在这里。

问题是,当我将 div2 拖放到 div1 时,该元素不会移动并被放置在 div1 内。

如何将div2类拖动并放置在div1类中?

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");

  console.log(data);
  assignedTabName = document.getElementById(data).className;
  console.log(assignedTabName);

  ev.target.appendChild(document.getElementById(data));

}
.div1 {
  border: 2px solid black;
  position: absolute;
  width: 23vw;
  height: 10vh;
  left: 10vw;
  bottom: 80vh;
}

.div2 {
  border: 2px solid black;
  position: fixed;
  width: 14vw;
  height: 12vh;
  left: 0vw;
  bottom: 60vh;
  background-color: #FFFF00;
}
<div class="div1" id="drop1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<div class="div2" id="drag1" draggable="true" ondragstart="drag(event)">
  <p width="336" height="69">hello</p>
</div>

最佳答案

我相信你的 div 定位规则是问题所在。如果删除 position: absolute来自.div1的CSS ,以及position: relative来自.div2的CSS ,那么拖放操作似乎按预期工作。

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");

  console.log(data);
  assignedTabName = document.getElementById(data).className;
  console.log(assignedTabName);

  ev.target.appendChild(document.getElementById(data));

}
.div1 {
  border: 2px solid black;
  width: 23vw;
  height: 10vh;
  left: 10vw;
  bottom: 80vh;
}

.div2 {
  border: 2px solid black;
  width: 14vw;
  height: 12vh;
  left: 0vw;
  bottom: 60vh;
  background-color: #FFFF00;
}
<div class="div1" id="drop1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<div class="div2" id="drag1" draggable="true" ondragstart="drag(event)">
  <p width="336" height="69">hello</p>
</div>

关于javascript - JavaScript 中拖放功能的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54396011/

相关文章:

javascript - 如何将 jquery 模板文件保存为每个文件中有多个模板的外部模板文件?

javascript - AJAX从php文件加载指定函数

javascript - 删除 div 之间的垂直空白,尤其是在遇到断点之后

javascript - 通过模式框显示的复选框

html - 在图像上水平和垂直居中文本框

javascript - 媒体源 api 源缓冲区追加不起作用

javascript - jQuery + Flash 媒体播放或 YouTube : call function after flv finishes playing?

html - 最大高度和宽度增加图像尺寸

html - 增加一个div的大小

jquery - 如何替换 jquery 中的文本并添加格式