Ich versuche, per Drag & Drop zu verwenden, um Bilder von einem <div>
zum anderen zu bewegen.Snapping Drag & Drop-Elemente in JavaScript
Derzeit kann ich die Bilder überall im Ziel <div>
verschieben, aber was ich wirklich will, ist, dass die Bilder zusammenschnappen, wenn sie fallen gelassen werden. Idealerweise könnten sie auf jeder Seite zusammenschnappen (nicht nur zum Beispiel unten oder rechts).
Ich habe ein paar verschiedene Dinge ausprobiert (einschließlich der Verwendung von <canvas>
), und es hat nicht funktioniert.
Dies ist, was ich bisher:
var clone;
var offsetx = null;
var offsety = null;
var isClone = false;
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
offsetx = ev.target.offsetLeft - event.clientX;
offsety = ev.target.offsetTop - event.clientY;
ev.dataTransfer.setData("text", ev.target.id);
}
function dropTrash(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
var remove = document.getElementById(data);
remove.parentNode.removeChild(remove);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
}
function dropClone(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
var num = Math.random() * (1000 - 1) + 1;
isClone = true;
clone = document.getElementById(data).cloneNode(true);
clone.id = "newId" + num.toString();
clone.style.position = "absolute";
clone.style.left = (event.clientX+offsetx)+"px";
clone.style.top = (event.clientY+offsety)+"px";
ev.target.appendChild(clone);
} \t
html, body {
height: 100%;
padding: 0;
margin: 0;
}
div {
width: 50%;
height: 50%;
float: left;
}
#div1 {
background: #DDD;
}
#div2 {
background: #AAA;
}
#div3 {
background: #777;
}
#div4 {
background: #444;
}
#imgDiv {
width: 611px;
height: 324px;
border: 5px solid #DDD;
}
<div id="div1">
</div>
<div id="div2">
</div>
<div id="div3" ondrop="dropTrash(event)" ondragover="allowDrop(event)">
<img id="drag1" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Bartagame_fcm.jpg/1200px-Bartagame_fcm.jpg" draggable="true" ondragstart="drag(event)" width="105" height="105">
<img id="drag2" src="http://www.earthtimes.org/newsimage/lizard_Ngo_Van_Tri_big_281.jpg" draggable="true" ondragstart="drag(event)" width="105" height="105"> \t
</div>
<div id="div4">
<div align="center" id="imgDiv" ondrop="dropClone(event)" ondragover="allowDrop(event)"></div>
</div>
Das hat bei mir überhaupt nicht funktioniert. :/ – Yikes
@Yikes Welcher Teil funktioniert nicht genau? Meinst du mit _snap together_, dass die Bilder nur nebeneinander ausgerichtet sein sollen, anstatt sie frei in eine beliebige Position zu bewegen? – Danziger
Nein, du hast genau verstanden, was ich wollte (und danke, dass du dir die Zeit genommen hast, all dies zu schreiben)! Aus welchem Grund auch immer, als ich diesen Code ausprobierte, funktionierte nicht einmal ein normaler Drop. Die Bilder würden einfach auf ihre ursprüngliche Position zurückspringen. Ich konnte nicht einmal den Teil testen, der sie zusammenschnipste. – Yikes