Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Experiment: Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.

Datei-Drag-and-Drop

HTML Drag-and-Drop-Schnittstellen ermöglichen es Webanwendungen, Dateien auf eine Webseite zu ziehen und fallen zu lassen. Dieses Dokument beschreibt, wie eine Anwendung eine oder mehrere Dateien akzeptieren kann, die aus demDateimanager der zugrunde liegenden Plattform gezogen und auf einer Webseite abgelegt werden.

Die Hauptschritte zum Ziehen und Ablegen bestehen darin, eineAblagezone zu definieren (d.h. ein Zielelement für das Ablegen der Datei) und Ereignis-Handler für diedrop- unddragover-Ereignisse zu definieren. Diese Schritte werden unten beschrieben, einschließlich Beispiel-Code-Snippets. Der vollständige Quellcode ist imMDN Drag-and-Drop-Repository verfügbar (Pull-Requests und/oder Probleme sind willkommen).

Beachten Sie, dassHTML Drag-and-Drop zwei verschiedene APIs definiert, um das Ziehen und Ablegen von Dateien zu unterstützen. Eine API ist dasDataTransfer-Interface und die zweite API sind dieDataTransferItem- undDataTransferItemList-Schnittstellen. Dieses Beispiel veranschaulicht die Verwendung beider APIs (und verwendet keine spezifischen Gecko-Schnittstellen).

Definieren Sie die Ablagezone

DasZielelement desdrop-Ereignisses benötigt einenondrop-Ereignis-Handler. Das folgende Code-Snippet zeigt, wie dies mit einem<div>-Element gemacht wird:

html
<div>  <p>Drag one or more files to this <i>drop zone</i>.</p></div>
js
document.getElementById("drop_zone").addEventListener("drop", dropHandler);

Typischerweise wird eine Anwendung einendragover-Ereignis-Handler auf dem Ablageziel-Element einschließen und dieser Handler wird das Standard-Zieh-Verhalten des Browsers deaktivieren. Um diesen Handler hinzuzufügen, müssen Sie einendragover-Ereignis-Handler einschließen:

js
document  .getElementById("drop_zone")  .addEventListener("dragover", dragOverHandler);

Schließlich möchte eine Anwendung möglicherweise das Ablageziel-Element gestalten, um visuell anzuzeigen, dass das Element eine Ablagezone ist. In diesem Beispiel verwendet das Ablageziel-Element die folgende Formatierung:

css
#drop_zone {  border: 5px solid blue;  width: 200px;  height: 100px;}

Hinweis:Diedragstart- unddragend-Ereignisse werden nicht ausgelöst, wenn eine Datei vom Betriebssystem in den Browser gezogen wird. Um zu erkennen, wann Betriebssystemdateien in den Browser gezogen werden, verwenden Siedragenter unddragleave.Dies bedeutet, dass es nicht möglich ist,setDragImage() zu verwenden, um ein benutzerdefiniertes Drag-Image/Cursor-Overlay anzuwenden, wenn Dateien vom Betriebssystem gezogen werden — weil der Drag-Daten-Speicher nur imdragstart-Ereignis modifiziert werden kann. Dies gilt auch fürsetData().

Verarbeiten des Ablagevorgangs

Dasdrop-Ereignis wird ausgelöst, wenn der Benutzer die Datei(en) ablegt. Im folgenden Ablage-Handler, wenn der Browser dieDataTransferItemList-Schnittstelle unterstützt, wird die MethodegetAsFile() verwendet, um auf jede Datei zuzugreifen; andernfalls wird diefiles-Eigenschaft derDataTransfer-Schnittstelle verwendet, um auf jede Datei zuzugreifen.

Dieses Beispiel zeigt, wie der Name jeder gezogenen Datei in die Konsole geschrieben wird. In einerechten Anwendung möchte eine Anwendung möglicherweise eine Datei mit derFile API verarbeiten.

Beachten Sie, dass in diesem Beispiel jedes Ziehelement, das keine Datei ist, ignoriert wird.

js
function dropHandler(ev) {  console.log("File(s) dropped");  // Prevent default behavior (Prevent file from being opened)  ev.preventDefault();  if (ev.dataTransfer.items) {    // Use DataTransferItemList interface to access the file(s)    [...ev.dataTransfer.items].forEach((item, i) => {      // If dropped items aren't files, reject them      if (item.kind === "file") {        const file = item.getAsFile();        console.log(`… file[${i}].name = ${file.name}`);      }    });  } else {    // Use DataTransfer interface to access the file(s)    [...ev.dataTransfer.files].forEach((file, i) => {      console.log(`… file[${i}].name = ${file.name}`);    });  }}

Deaktivieren des Standard-Zieh-Verhaltens des Browsers

Der folgendedragover-Ereignis-Handler ruftpreventDefault() auf, um den Standard-Zieh-und-Ablege-Handler des Browsers zu deaktivieren.

js
function dragOverHandler(ev) {  console.log("File(s) in drop zone");  // Prevent default behavior (Prevent file from being opened)  ev.preventDefault();}

Siehe auch

MDN-Feedback-Box

Diese Seite wurde automatisch aus dem Englischen übersetzt.


[8]ページ先頭

©2009-2025 Movatter.jp