HTML - Drag and Drop API: Ein Anfängerleitfaden

Hallo da draußen, zukünftige Web-Entwickler! Heute machen wir uns auf eine aufregende Reise in die Welt der HTML5 Drag and Drop API. Als Ihr freundlicher Nachbarschafts-Computerlehrer bin ich hier, um Sie durch diese faszinierende Funktion zu führen, die Ihre Webseiten interaktiver und benutzerfreundlicher machen kann. Also holen Sie sich Ihr Lieblingsgetränk, machen Sie es sich bequem und tauchen wir ein!

HTML - Drag & Drop API

Was ist die Drag and Drop API?

Bevor wir anfangen, Elemente wie digitale Zauberer hin und her zu ziehen, lassen Sie uns verstehen, worum es bei dieser API geht. Die Drag and Drop (DnD) API ermöglicht es uns, HTML-Elemente ziehbar zu machen, was bedeutet, dass Benutzer auf ein Element klicken, es an eine neue Position ziehen und dort ablegen können. Es ist, als würde man Ihren Webseiten-Elementen Superkräfte verleihen!

Ein Element ziehbar machen

Lassen Sie uns mit den Grundlagen beginnen. Um ein Element ziehbar zu machen, müssen wir das draggable-Attribut verwenden. Es ist so einfach wie das Hinzufügen dieses Attributs zu jedem HTML-Element, das Sie den Benutzern ermöglichen möchten, hin und her zu bewegen.

<div draggable="true">Ziehe mich!</div>

In diesem Beispiel haben wir ein <div>-Element erstellt und es ziehbar gemacht, indem wir draggable="true" gesetzt haben. Jetzt können Benutzer auf dieses Div klicken und es über die Seite ziehen. Cool, oder?

Aber warten Sie, es gibt mehr! Nur ein Element ziehbar zu machen, reicht nicht aus. Wir müssen etwas JavaScript hinzufügen, um zu steuern, was passiert, wenn das Element gezogen und abgelegt wird. Das ist, wo unsere Drag-and-Drop-Events nützlich werden.

Drag and Drop Events

Die Drag and Drop API bietet uns mehrere Ereignisse, auf die wir hören und reagieren können. Diese Ereignisse ermöglichen es uns, den gesamten Drag-and-Drop-Vorgang zu steuern. Sehen wir uns die wichtigsten Ereignisse an:

Ereignisname Beschreibung
dragstart Wird ausgelöst, wenn der Benutzer anfängt, ein Element zu ziehen
drag Wird kontinuierlich ausgelöst, während der Benutzer ein Element zieht
dragenter Wird ausgelöst, wenn ein gezogenes Element eine gültige Abgabestation betritt
dragover Wird kontinuierlich ausgelöst, während ein gezogenes Element über eine gültige Abgabestation schwebt
dragleave Wird ausgelöst, wenn ein gezogenes Element eine gültige Abgabestation verlässt
drop Wird ausgelöst, wenn der Benutzer ein Element ablegt
dragend Wird ausgelöst, wenn der Ziehvorgang endet (egal, ob erfolgreich oder nicht)

Nun sehen wir uns an, wie wir diese Ereignisse in der Praxis verwenden können:

<div id="draggable" draggable="true">Ziehe mich!</div>
<div id="droppable">Hier ablegen!</div>

<script>
const draggable = document.getElementById('draggable');
const droppable = document.getElementById('droppable');

draggable.addEventListener('dragstart', (e) => {
console.log('Ziehen gestartet');
});

droppable.addEventListener('dragover', (e) => {
e.preventDefault(); // Notwendig, um das Ablegen zu ermöglichen
console.log('Ziehe über Abgabebereich');
});

droppable.addEventListener('drop', (e) => {
e.preventDefault();
console.log('Abgelegt!');
droppable.appendChild(draggable);
});
</script>

In diesem Beispiel haben wir zwei <div>-Elemente erstellt: eines ziehbar und eines ablehnbar. Wir haben Ereignislistener für dragstart, dragover und drop hinzugefügt. Wenn Sie das Element ziehen und in den Abgabebereich fallen lassen, sehen Sie Nachrichten in der Konsole und das gezogene Element wird in den Abgabebereich verschoben.

Das DataTransfer-Objekt

Nun sprechen wir über ein mächtiges Werkzeug in unserem Drag-and-Drop-Werkzeugkasten: das DataTransfer-Objekt. Dieses Objekt wird verwendet, um Daten zu halten, die während eines Drag-and-Drop-Vorgangs gezogen werden. Es ermöglicht uns, Informationen über den Ziehvorgang zu setzen und abzurufen.

So verwenden wir es:

<div id="draggable" draggable="true">Ziehe mich!</div>
<div id="droppable">Hier ablegen!</div>

<script>
const draggable = document.getElementById('draggable');
const droppable = document.getElementById('droppable');

draggable.addEventListener('dragstart', (e) => {
e.dataTransfer.setData('text/plain', e.target.id);
});

droppable.addEventListener('dragover', (e) => {
e.preventDefault();
});

droppable.addEventListener('drop', (e) => {
e.preventDefault();
const data = e.dataTransfer.getData('text');
const draggedElement = document.getElementById(data);
e.target.appendChild(draggedElement);
});
</script>

In diesem Beispiel speichern wir die ID des gezogenen Elements, wenn das Ziehen beginnt, und verwenden diese Daten, um das gezogene Element an die Abgabestation zu bewegen.

Drag and Drop Prozess

Nun, da wir die einzelnen Teile abgedeckt haben, gehen wir durch den gesamten Drag-and-Drop-Vorgang:

  1. Ziehen initiieren: Der Benutzer klickt auf ein ziehbares Element und beginnt zu ziehen.
  2. Ziehen: Während der Benutzer die Maus bewegt, wird das drag-Ereignis kontinuierlich ausgelöst.
  3. Abgabestation betreten: Wenn das gezogene Element eine gültige Abgabestation betritt, wird das dragenter-Ereignis ausgelöst.
  4. Über Abgabestation: Während das gezogene Element über die Abgabestation schwebt, wird das dragover-Ereignis kontinuierlich ausgelöst.
  5. Abgabestation verlassen: Wenn das gezogene Element die Abgabestation verlässt, wird das dragleave-Ereignis ausgelöst.
  6. Ablegen: Wenn der Benutzer das Element fallen lässt, wird das drop-Ereignis ausgelöst.
  7. Ziehen beenden: Schließlich wird das dragend-Ereignis ausgelöst, um das Ende des Ziehvorgangs zu signalisieren.

Hier ist ein umfassendes Beispiel, das alles zusammenführt:

<div id="draggable" draggable="true">Ziehe mich!</div>
<div id="droppable">Hier ablegen!</div>

<script>
const draggable = document.getElementById('draggable');
const droppable = document.getElementById('droppable');

draggable.addEventListener('dragstart', (e) => {
e.dataTransfer.setData('text/plain', e.target.id);
e.target.style.opacity = '0.5';
});

draggable.addEventListener('dragend', (e) => {
e.target.style.opacity = '';
});

droppable.addEventListener('dragenter', (e) => {
e.target.style.background = 'lightblue';
});

droppable.addEventListener('dragleave', (e) => {
e.target.style.background = '';
});

droppable.addEventListener('dragover', (e) => {
e.preventDefault();
});

droppable.addEventListener('drop', (e) => {
e.preventDefault();
const data = e.dataTransfer.getData('text');
const draggedElement = document.getElementById(data);
e.target.appendChild(draggedElement);
e.target.style.background = '';
});
</script>

In diesem Beispiel haben wir alle Drag-and-Drop-Ereignisse implementiert. Wir ändern die Deckungskraft des gezogenen Elements während des Ziehens, heben den Abgabebereich hervor, wenn ein Element darüber geschwebt wird, und bewegen das gezogene Element in den Abgabebereich, wenn es abgelegt wird.

Und da haben Sie es, Leute! Sie haben die Grundlagen der HTML5 Drag and Drop API gelernt. Mit diesem Wissen können Sie interaktive Elemente auf Ihren Webseiten erstellen, die Benutzer ziehen und fallen lassen können. Denken Sie daran, Übung macht den Meister, also fürchten Sie sich nicht, Ihre Drag-and-Drop-Fähigkeiten zu üben und eigene Projekte zu erstellen.

Als wir diese Lektion beenden, erinnere ich mich an ein Zitat von dem großartigen Bruce Lee: "Ich fürchte nicht den Mann, der 10.000 Kicks einmal geübt hat, sondern ich fürchte den Mann, der einen Kick 10.000 Mal geübt hat." Also, gehen Sie hinaus und üben Sie Ihre Drag-and-Drop-Fähigkeiten. Vor Ihnen liegen großartige interaktive Weberfahrungen, die Ihre Benutzer begeistern werden!

Frohes Coden und möge Ihre Elemente stets dort fallen, wo Sie sie hinwollen!

Credits: Image by storyset