JavaScript - Drag and Drop API

Bild mit Maus ziehen


Bild in das Anzeigefenster ziehen, zeigt das Bild im großen Fenster.

Als Basis wurde das Einlesen der Bilderliste und das Anzeigen aus Bildergalerie mit JavaScript genommen.

Für das Drag and Drop müssen zusätzliche EventListener erzeugt werden.

In der Funktion initiate wurde für das Ziel-Div (bildgross) das Standardverhalten des Browsers ausgeschaltet und für den Fall des Objekt loslassens die Funktion loslassen definiert.

  ////////////////////////////////////////////////////////////////////////////////////
  // EventListener für Drag and Drop
  var ve_div = document.getElementById("bildgross");                                // div für das große Bild
  ve_div.addEventListener("dragenter", function(e) { e.preventDefault(); }, false); // Standardverhalten des Browsers ausschalten
  ve_div.addEventListener("dragover", function(e) { e.preventDefault(); }, false);  // Standardverhalten des Browsers ausschalten
  ve_div.addEventListener("drop", loslassen, false);                                // Funktionsaufruf, wenn das Bild im div losgelassen wird

Beim Anzeigen der Bilderliste wird für jedes Bild ein EventListener für das Starten des Ziehens definiert.

    document.getElementById("bild"+v_i).addEventListener("dragstart", ziehen, false);  // Eventlistener für ziehen setzen

In der Funktion ziehen wird der Name des Bildes aus dem gezogenen Bild ausgelesen und in das dataTransfer Objekt gestellt. Das ist auch das Standadverhalten des Browsers.

In der Funktion loslassen wird der Name des Bildes aus dem dataTransfer Objekt gelesen und als Attribut dem Bild hinzugefügt. Auch hier muss das Standardverhalten des Browsers ausgeschaltet werden.

ziehen() loslassen()

Text mit Maus ziehen


In diesem Beispiel ist im linken Fenster eine Tabelle enthalten, aus der man Zeilen in das rechte Fenster ziehen kann.

Feld 1/1 Feld 1/2 Feld 1/3
Feld 2/1 Feld 2/2 Feld 2/3
Feld 3/1 Feld 3/2 Feld 3/3

Damit eine Tabellenzeile überhaupt gezogen werden kann muss sie das Attribut draggable="true" erhalten.

Jede Tabellenzeile hat eine ID textQuelle01, textQuelle02 usw." erhalten.

Jeder Tabellenzeile wird ein Eventlistener für das Ziehen zugeordnet.

  document.getElementById("textQuelle01").addEventListener("dragstart", textZiehen, false);  // Eventlistener für ziehen setzen
  document.getElementById("textQuelle02").addEventListener("dragstart", textZiehen, false);  // Eventlistener für ziehen setzen
  document.getElementById("textQuelle03").addEventListener("dragstart", textZiehen, false);  // Eventlistener für ziehen setzen

Für die Übergabe der Werte gibt es zwei Möglichkeiten.

Bei der ersten Variante wird die ID der Tabellenzelle übergeben. In der Funktion textLoslassen wird mit dieser ID in der Quelltabelle gelesen und in die Zieltabelle übernommen.

Bei der zweiten Variante wird der Inhalt der Tabellenzellen übergeben. In der Funktion textLoslassen wird dieser Text in die Zieltabelle geschrieben.

Die zweite Variante ist besser, da damit auch einfacher fensterübergreifend gearbeitet werden kan.

HTML-TAGs anzeigen textZiehen() textLoslassen()

Reihenfolge von Tabellen-/Listeneinträge mit Maus ändern


In diesem Beispiel kann jede Zeile der Tabelle mit der Maus an eine neue Position gezogen werden. Genau so kann natürlich auch mit einer Liste gearbeitet werden.

Zur Erstellung der Tabelle wird die Funktion reihenfolgeTabErstellen aufgerufen. Diese Funktion entspricht der Erstellung einer Tabelle aus einer DB-Abfrage.

Es wird eine Tabellenzeile erzeugt. Diese Zeile bekommt die ID reihenfolge- + Zeilennummer. (reihenfolge-0, reihenfolge-1 . . .). Damit eine Tabellenzeile überhaupt gezogen werden kann muss sie das Attribut draggable="true" erhalten.

Mit den Eventlistenern dragenter und dragover wird das Standardverhalten des Browsers abgeschaltet.

Mit dem Eventlistener dragstart wird die Funtion reihenfolgeZiehen aufgerufen. In dieser Funktion werden die Werte aus der Quell-Zeile in das Datatransfer-Objekt übergeben.

Mit dem Eventlistener drop wird die Funtion reihenfolgeLoslassen aufgerufen. In dieser Funktion werden zunächst die Zeilen zwischen dem Ziel und der Quelle um eins nach hinten verschoben. Dann werden die Daten aus dem Datatransfer-Objekt in die Zielzellen geschrieben. Die IDs der Zeilen und Zellen ändern sich nicht, da nur der Inhalt der Zellen geändert wird.

reihenfolgeTabErstellen() reihenfolgeZiehen() reihenfolgeLoslassen()

Dateien aus externem Dateimanager ziehen


Die markierten Dateien aus einem externe Dateimanager können per Drag and Drop in das Zielfenster gezogen werden.

dateiLoslassen()