拖动一张图片时拖放另一张图片正在拖放
Drag and drop when dragging one picture another picture is dropping
<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");
ev.target.appendChild(document.getElementById(data));
}
</script>
<div class="label">Akita Inu</div>
<div class="box-wrapper">
<div class="box-left" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div class="box-right" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="corgi.jpeg" draggable="true" ondragstart="drag(event)" width="600" height="250"></div>
</div>
<div class="label">Cockapoo</div>
<div class="box-wrapper">
<div class="box-left" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div class="box-right" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="akitainu.jpeg" draggable="true" ondragstart="drag(event)" width="600" height="250"></div>
</div>
<div class="label">Corgi</div>
<div class="box-wrapper">
<div class="box-left" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div class="box-right" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="cockapoo.jpeg" draggable="true" ondragstart="drag(event)" width="600" height="250"></div>
</div>
<div class="label">Shiba Inu</div>
<div class="box-wrapper">
<div class="box-left" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div class="box-right" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="shibaInu.jpeg" draggable="true" ondragstart="drag(event)" width="600" height="250"></div>
</div>
当我将图片拖到另一个 div 时,由于某种原因总是出现 Corgi 图片。我尝试使用 html5_draganddrop w3schools 指南来制作它,但只有一张图片有两个 div,而我有多张图片和多个 div,据我所知,本指南对我不起作用
您的代码中的问题是所有图像都具有相同的 ID。更进一步,如果您想在拖动时显示自定义图像,您可以执行以下操作。
在您要添加拖动图像的 dragstart 事件处理程序中。 setDragImage 函数中的第二个和第三个参数是 X 和 Y 偏移量。您可以在以下位置查看更多相关信息:https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
let img = new Image();
img.src = 'https://www.somedomain.com/myimage.png';
ev.dataTransfer.setDragImage(img, 10, 19);
}
<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");
ev.target.appendChild(document.getElementById(data));
}
</script>
<div class="label">Akita Inu</div>
<div class="box-wrapper">
<div class="box-left" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div class="box-right" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="corgi.jpeg" draggable="true" ondragstart="drag(event)" width="600" height="250"></div>
</div>
<div class="label">Cockapoo</div>
<div class="box-wrapper">
<div class="box-left" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div class="box-right" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="akitainu.jpeg" draggable="true" ondragstart="drag(event)" width="600" height="250"></div>
</div>
<div class="label">Corgi</div>
<div class="box-wrapper">
<div class="box-left" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div class="box-right" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="cockapoo.jpeg" draggable="true" ondragstart="drag(event)" width="600" height="250"></div>
</div>
<div class="label">Shiba Inu</div>
<div class="box-wrapper">
<div class="box-left" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div class="box-right" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="shibaInu.jpeg" draggable="true" ondragstart="drag(event)" width="600" height="250"></div>
</div>
当我将图片拖到另一个 div 时,由于某种原因总是出现 Corgi 图片。我尝试使用 html5_draganddrop w3schools 指南来制作它,但只有一张图片有两个 div,而我有多张图片和多个 div,据我所知,本指南对我不起作用
您的代码中的问题是所有图像都具有相同的 ID。更进一步,如果您想在拖动时显示自定义图像,您可以执行以下操作。
在您要添加拖动图像的 dragstart 事件处理程序中。 setDragImage 函数中的第二个和第三个参数是 X 和 Y 偏移量。您可以在以下位置查看更多相关信息:https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
let img = new Image();
img.src = 'https://www.somedomain.com/myimage.png';
ev.dataTransfer.setDragImage(img, 10, 19);
}