0Pricing
HTML Academy · Lektion

draggable-Attribut und dragstart-Ereignis

Machen Sie Elemente ziehbar und reagieren Sie auf dragstart

draggable-Attribut und dragstart-Ereignis ist eine kostenlose HTML Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des HTML Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der HTML Academy-Kurs umfasst insgesamt 4 Lektionen.

Das draggable-Attribut

Jedes Element wird zu einer Drag-Quelle, wenn Sie draggable="true" setzen. Links und Bilder können standardmäßig gezogen werden; für alle anderen Elemente (divs, lis, spans) ist das explizite Attribut erforderlich. Mit draggable="false" schließen Sie ein Element vom nativen Ziehen aus.

<div draggable="true" id="card">Drag me</div>

Das dragstart-Ereignis

Wenn der Benutzer einen Drag-Vorgang beginnt, löst das Quellenelement dragstart aus. Hier initialisieren Sie den Drag-Vorgang: Halten Sie fest, welches Element bewegt wird, formatieren Sie es bei Bedarf und schreiben Sie Daten in das dataTransfer-Objekt, die das Drop-Ziel lesen wird.

card.addEventListener("dragstart", (e) => {
  e.dataTransfer.setData("text/plain", card.id);
});

Ohne dragstart passiert nichts

Wenn Sie ein Element als draggable markieren, aber dragstart nie behandeln, zieht der Browser zwar weiterhin ein Geisterbild, doch es werden keine Daten gesetzt. Deshalb lehnen die meisten Drop-Ziele den Drop ab. Kombinieren Sie ein draggable-Attribut immer mit einem dragstart-Listener, der mindestens eine Kennung speichert.

effectAllowed setzen

e.dataTransfer.effectAllowed = "move" in dragstart schränkt den Vorgang ein: "copy", "move", "link", "copyMove", "all" oder "none". Dies bestimmt den Cursor, den der Browser anzeigt, sowie den dropEffect, den das Ziel später setzen darf.

Einen visuellen Hinweis hinzufügen

Fügen Sie der Quelle eine CSS-Klasse hinzu, damit sie während des Ziehens abgeblendet erscheint: card.classList.add("dragging"). Entfernen Sie die Klasse im dragend-Ereignis, damit die Formatierung sowohl nach einem erfolgreichen Drop als auch nach einem Abbruch mit Escape zurückgesetzt wird.

Benutzerdefiniertes Drag-Bild

Standardmäßig zieht der Browser eine durchscheinende Momentaufnahme der Quelle. Überschreiben Sie dieses Verhalten mit e.dataTransfer.setDragImage(node, offsetX, offsetY) – übergeben Sie ein ausgeblendetes DOM-Element oder ein Image, um eine benutzerdefinierte Vorschau am Cursor anzuzeigen.

const ghost = document.getElementById("drag-preview");
card.addEventListener("dragstart", (e) => {
  e.dataTransfer.setDragImage(ghost, 20, 20);
});

Das dragend-Ereignis

dragend wird nach Abschluss des Drag-Vorgangs an der Quelle ausgelöst – unabhängig davon, ob der Drop erfolgreich war, auf einem ungültigen Ziel erfolgte oder abgebrochen wurde. Verwenden Sie es für Aufräumarbeiten: Entfernen Sie die dragging-Klasse, blenden Sie Geistervorschauen aus und stellen Sie die Deckkraft wieder her.

Abbruch erkennen

Prüfen Sie innerhalb von dragend e.dataTransfer.dropEffect. Wenn der Wert "none" lautet, hat der Drop nicht stattgefunden (das Ziel hat ihn abgelehnt, der Benutzer hat Escape gedrückt oder außerhalb der Seite abgelegt). Andernfalls entspricht er dem vom Drop-Ziel gewählten Effekt ("move", "copy", "link").

Drag-Vorgänge auf Touch-Geräten

Native Drag-and-Drop-Funktionen sind primär für Desktop-Systeme ausgelegt. Auf Touch-Geräten funktioniert die API ohne ein Polyfill oder einen auf Pointer Events basierenden Ersatz kaum. Für mobilfreundliche Oberflächen zum Neuanordnen eignen sich Bibliotheken wie SortableJS oder dnd-kit, die beide Ereignismodelle abstrahieren.

Überlegungen zur Barrierefreiheit

Native Drag-and-Drop-Funktionen sind nicht per Tastatur zugänglich – Benutzer, die ausschließlich die Tastatur verwenden, können Elemente nicht neu anordnen. Bieten Sie immer eine Alternative an: Handler für Pfeiltasten, Schaltflächen zum Verschieben nach oben oder unten oder einen über ARIA gesteuerten Dialog zum Neuanordnen. Drag-and-Drop sollte die Bedienung verbessern, nicht ersetzen.

Browser-Standardverhalten deaktivieren

Die Textauswahl innerhalb ziehbarer Elemente kann den Drag-Vorgang stören. Wenden Sie auf die Quelle das CSS user-select: none und -webkit-user-drag: element an, damit der Browser das Element zieht, statt den darin enthaltenen Text auszuwählen.

Wissensüberprüfung

Warum müssen Sie normalerweise einen dragstart-Listener hinzufügen, obwohl das Attribut draggable="true" allein ein Element ziehbar macht?

Zusammenfassung

Markieren Sie Quellen mit draggable="true" und verwenden Sie dragstart, um dataTransfer zu befüllen, effectAllowed zu setzen und optional ein benutzerdefiniertes Drag-Bild festzulegen. Kombinieren Sie dies mit dragend, um Formatierungen aufzuräumen. Bieten Sie aus Gründen der Barrierefreiheit Tastaturalternativen an und ziehen Sie für Touch-Geräte Polyfills in Betracht.

Häufig gestellte Fragen

Ist die Lektion „draggable-Attribut und dragstart-Ereignis“ kostenlos?

Ja — der vollständige Text von „draggable-Attribut und dragstart-Ereignis“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des HTML Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der HTML Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „draggable-Attribut und dragstart-Ereignis“?

Machen Sie Elemente ziehbar und reagieren Sie auf dragstart Du übst HTML Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um HTML Academy zu starten?

Keine Vorkenntnisse erforderlich. HTML Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „draggable-Attribut und dragstart-Ereignis“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser HTML Academy-Lektion Code schreiben und ausführen?

Ja. Jede HTML Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. draggable-Attribut und dragstart-Ereignis
  2. dragover- und drop-Ereignisse
  3. dataTransfer-Objekt
  4. Praxisprojekt: Liste per Drag-and-drop neu ordnen
← Zurück zu HTML Academy