dataTransfer-Objekt
Übertragen Sie Daten zwischen Ziehquelle und Ablageziel
dataTransfer-Objekt ist eine kostenlose HTML Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Welche Daten dataTransfer enthält
Das dataTransfer-Objekt ist an jedes Drag-Ereignis angehängt und der einzige Kommunikationskanal zwischen Quelle und Ziel. Es überträgt Nutzdaten, Dateilisten, erlaubte Effekte und den ausgewählten Drop-Effekt.
setData und getData
Die Quelle schreibt typisierte Nutzdaten mit e.dataTransfer.setData(format, value). Das Ziel liest sie mit e.dataTransfer.getData(format). Beide Argumente sind Zeichenfolgen; Werte werden vor dem Speichern in Zeichenfolgen umgewandelt.
src.addEventListener("dragstart", (e) => {
e.dataTransfer.setData("text/plain", "hello");
e.dataTransfer.setData("application/json", JSON.stringify({ id: 42 }));
});Mehrere MIME-Typen
Wenn dieselbe Nutzlast unter mehreren Typen gespeichert wird, ist ein Drag-Vorgang interoperabel: "text/plain" funktioniert in jedem Texteditor, "text/uri-list" wird von Browsern als URL erkannt und "text/html" bewahrt die Formatierung in Textverarbeitungsprogrammen. Das Ziel wählt den Typ, den es versteht.
Lesebeschränkungen außerhalb von drop
Aus Datenschutzgründen stellt der Browser dragenter- und dragover-Handlern über e.dataTransfer.types nur die Liste der Typen zur Verfügung, nicht deren Werte. Die eigentlichen Daten können nur innerhalb des drop-Ereignisses eines akzeptierenden Ziels gelesen werden.
Die files-Liste
Wenn der Benutzer vom Desktop zieht, ist e.dataTransfer.files eine FileList aus File-Objekten. Bei Drag-Vorgängen, die innerhalb der Seite beginnen, ist sie leer. Betrachten Sie sie als den maßgeblichen Weg, um einen externen Datei-Drop zu erkennen und auf Größe, Namen und Typ zuzugreifen.
Die items-Sammlung
e.dataTransfer.items stellt sowohl Zeichenfolgen als auch Dateien als DataTransferItem-Objekte bereit. Jedes Element besitzt kind ("string" oder "file"), type (MIME) und getAsString(cb) / getAsFile(). items ist die moderne, typbewusste Alternative zu files und getData.
for (const item of e.dataTransfer.items) {
if (item.kind === "file") {
const file = item.getAsFile();
console.log(file.name);
} else {
item.getAsString((s) => console.log(item.type, s));
}
}effectAllowed gegenüber dropEffect
effectAllowed wird von der Quelle in dragstart gesetzt und listet die von der Quelle unterstützten Vorgänge auf. dropEffect wird vom Ziel in dragover gesetzt und wählt einen dieser Vorgänge aus. Der Browser bricht den Drop ab, wenn die beiden Werte nicht übereinstimmen.
Benutzerdefiniertes Drag-Bild
e.dataTransfer.setDragImage(node, x, y) ersetzt das standardmäßige Geisterbild. Übergeben Sie ein nach Ihren Vorstellungen formatiertes, außerhalb des sichtbaren Bereichs liegendes DOM-Element sowie den Versatz des Cursors relativ zu diesem Element. Die Änderung gilt nur für den aktuellen Drag-Vorgang.
clearData
e.dataTransfer.clearData() löscht alle Formate; clearData("text/plain") entfernt ein einzelnes Format. Das ist selten nötig, da dataTransfer für jeden Drag-Vorgang neu erstellt wird, aber nützlich, wenn Sie zunächst Daten eintragen und den Vorgang dann abbrechen möchten.
Verhalten über Origins hinweg
Dateien, die von einer Seite auf Origin A auf eine Seite auf Origin B gezogen werden, werden weiterhin übermittelt – die API funktioniert über Origins hinweg. Die empfangende Seite sieht jedoch nur, was die Quelle ausdrücklich in dataTransfer abgelegt hat; ein beliebiger Zugriff auf das DOM wird nicht gewährt.
Vom Browser auf den Desktop ziehen
Durch das Schreiben des Typs "DownloadURL" (setData("DownloadURL", "image/png:filename.png:https://...")) kann eine Seite dem Benutzer ermöglichen, eine Datei aus dem Browser auf den Desktop zu ziehen. Die Browserunterstützung ist eingeschränkt (Chromium-basierte Browser); prüfen Sie daher die Unterstützung und bieten Sie einen geeigneten Fallback an.
Wissenscheck
Warum darf dataTransfer.getData() während des dragover-Ereignisses nicht den tatsächlich gespeicherten Wert zurückgeben?
Zusammenfassung
dataTransfer ist die Verbindung zwischen Ziehquelle und Ablageziel. Verwenden Sie setData/getData für typisierte String-Nutzdaten, items für eine einheitliche Ansicht von Dateien und Strings, files für Ablagen vom Desktop, setDragImage für benutzerdefinierte Vorschauen und effectAllowed/dropEffect, um die Operation auszuhandeln.
Häufig gestellte Fragen
Ist die Lektion „dataTransfer-Objekt“ kostenlos?
Ja — der vollständige Text von „dataTransfer-Objekt“ 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 „dataTransfer-Objekt“?
Übertragen Sie Daten zwischen Ziehquelle und Ablageziel 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 3 von 4.
Wie lange dauert die Lektion „dataTransfer-Objekt“?
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
- draggable-Attribut und dragstart-Ereignis
- dragover- und drop-Ereignisse
- dataTransfer-Objekt
- Praxisprojekt: Liste per Drag-and-drop neu ordnen