我想创建一个页面,可以在div之间移动图像。我可以在其他div上移回图像。问题是,如果我将一个图像移到另一个图像上,则“另一个”图像会消失。我正在寻找防止这种情况的方法。
<div id="wrapper">
<div id="cards_wrapper">
<div id="cards_left">
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
<img src="https://picsum.photos/150" draggable="true" ondragstart="drag(event)" id="dragImg1">
</div>
<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">
<img src="https://picsum.photos/150/150" draggable="true" ondragstart="drag(event)" id="dragImg2">
</div>
<div id="div3" ondrop="drop(event)" ondragover="allowDrop(event)">
<img src="https://picsum.photos/id/237/150" draggable="true" ondragstart="drag(event)" id="dragImg3">
</div>
<div id="div4" ondrop="drop(event)" ondragover="allowDrop(event)">
<img src="https://picsum.photos/150?grayscale" draggable="true" ondragstart="drag(event)" id="dragImg4">
</div>
</div>
<div id="cards_right">
<div id="right_tiger" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div id="right_bear" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div id="right_butter" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div id="right_croc" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
</div>
</div>
</div>
function allowDrop(event)
{
event.preventDefault();
}
function drag(event)
{
event.dataTransfer.setData("text", event.target.id);
}
function drop(event)
{
event.preventDefault();
var imgData = event.dataTransfer.getData("text");
event.target.appendChild(document.getElementById(imgData));
}
CodePen here
我希望如果将图像移到另一个图像上,它将不会移动,而是停留在当前位置的div中。
谢谢您的时间。
答案 0 :(得分:0)
您需要克隆原始元素并创建一个新节点,否则它将被移走。
function allowDrop(event)
{
event.preventDefault();
}
function drag(event)
{
event.dataTransfer.setData("text", event.target.id);
}
function drop(event)
{
event.preventDefault();
var imgData = event.dataTransfer.getData("text");
var newNode = document.getElementById(imgData).cloneNode(true);
clearChildren(event.target);
event.target.appendChild(newNode);
}
function clearChildren(el) {
while (el.firstChild) {
el.removeChild(el.firstChild);
}
}
答案 1 :(得分:0)
这是您的代码解决方案的另一个示例。这里图像不会消失,我们不需要为图像创建克隆:
function allowDrop(event)
{
event.preventDefault();
}
function drag(event)
{
event.dataTransfer.setData("text", event.target.id);
}
function drop(event)
{
if (ev.target.tagName != "IMG") {
event.preventDefault();
var imgData = event.dataTransfer.getData("text");
var newNode = document.getElementById(imgData);
event.target.appendChild(newNode);
}
}