JavaScript: Elemente per Drag&Drop verschieben
Mit JavaScript lassen sich HTML-Elemente mit der Maus innerhalb eines Dokuments verschieben:
| Kartoffel |
| Tomate |
| Gurke |
| Zwiebel |
| Karotte |
Hier der dazugehörige Quelltext:
Code kopieren
<!DOCTYPE html>
<html lang='de'>
<head>
<title>Drag&Drop</title>
<meta charset='UTF-8'>
<style>
table { margin:30px auto; border-collapse:collapse; }
table.dragging td * { pointer-events:none; }
tr { border-top:2px solid transparent; }
tr:not(.dummy) { background:hsl(30,85%,30%); }
tr:not(.dummy):not(.drag):hover { background:hsl(30,85%,35%); }
tr.drag { background:hsl(30,85%,40%); }
tr.drop { border-color:yellow; }
td { padding:10px; color:white; font-size:30px; }
</style>
</head>
<body>
<table id='table1'>
<tr><td>Kartoffel</td></tr>
<tr><td>Tomate</td></tr>
<tr><td>Gurke</td></tr>
<tr><td>Zwiebel</td></tr>
<tr><td>Karotte</td></tr>
<tr class='dummy'><td></td></tr> <!-- dient nur als drop target -->
</table>
<script>
function makeDraggable(id) {
table = document.getElementById(id);
q = table.querySelectorAll('tr');
for (i = 0; i < q.length; i++) {
if (i < q.length - 1) { // tr.dummy überspringen
q[i].setAttribute('draggable', 'true');
}
q[i].addEventListener('dragstart', (ev) => {
table.classList.add('dragging');
source = ev.target;
if (table.querySelector('.drag')) table.querySelector('.drag').classList.remove('drag');
ev.target.classList.add('drag');
});
q[i].addEventListener('dragenter', (ev) => {
if (ev.target.parentNode.tagName == 'TR') ev.target.parentNode.classList.add('drop');
});
q[i].addEventListener('dragover', (ev) => {
ev.preventDefault();
});
q[i].addEventListener('dragleave', (ev) => {
if (ev.target.parentNode.tagName == 'TR') ev.target.parentNode.classList.remove('drop');
});
q[i].addEventListener('dragend', (ev) => {
document.getElementById(drag[0]).classList.remove('dragging');
});
q[i].addEventListener('drop', (ev) => {
table.classList.remove('dragging');
if (source.tagName == 'TR') ev.target.parentNode.parentNode.insertBefore(source, ev.target.parentNode);
table.style.pointerEvents = 'none';
// hier können weitere drop-effekte notiert werden
table.style.pointerEvents = 'all';
ev.target.parentNode.classList.remove('drop');
});
}
}
makeDraggable('table1');
</script>
</body>
</html>
Beschreibung: JavaScript: Drag&Drop
Stichworte: webdesign,webgestaltung,programmierung,javascript,anleitung,tutorial,drag,drop
Stichworte: webdesign,webgestaltung,programmierung,javascript,anleitung,tutorial,drag,drop