HTML5 bietet eine direkte Drag-and-Drop-API, die es uns erheblich erleichtert, Drag-and-Drop-Effekte zu erzielen. Wir müssen nicht viele JS schreiben. Drop-Ereignisse von Elementen, um verschiedene Drag-and-Drop-Funktionen zu erreichen.
Vorwort
HTML5 bietet eine direkte Drag-and-Drop-API, die uns das Erreichen des Drag-and-Drop-Effekts erheblich erleichtert Schreiben Sie viele JS, nur durch Abhören der Drag-and-Drop-Ereignisse von Elementen können verschiedene Drag-and-Drop-Funktionen implementiert werden.
Wenn Sie ein Element per Drag & Drop verschieben möchten, müssen Sie das Draggable-Attribut des Elements auf „true“ setzen. Wenn das Attribut „false“ ist, ist Drag & Drop nicht zulässig. Sowohl für das img-Element als auch für das a-Element ist das Draggable-Attribut standardmäßig auf true gesetzt, sodass sie direkt per Drag & Drop verschoben werden können. Wenn Sie diese beiden Elemente nicht per Drag & Drop verschieben möchten, setzen Sie das Attribut einfach auf false.
Drag-and-Drop-Ereignisse
Drag-and-Drop-Ereignisse werden von verschiedenen Elementen generiert. Wenn ein Element per Drag-and-Drop verschoben wird, durchläuft es möglicherweise viele Elemente und erreicht schließlich das Element, das Sie platzieren möchten. Hier nenne ich das gezogene Element vorübergehend das Quellobjekt, das übergebene Element das Prozessobjekt und das angekommene Element das Zielobjekt. Verschiedene Objekte erzeugen unterschiedliche Drag-and-Drop-Ereignisse.
Quellobjekt:
Dragstart: Das Quellobjekt beginnt mit dem Ziehen und Ablegen.
Ziehen: Während des Drag-and-Drop-Vorgangs des Quellobjekts.
dragend: Das Drag & Drop des Quellobjekts endet.
Prozessobjekt:
dragenter: Das Quellobjekt beginnt, in den Bereich des Prozessobjekts einzutreten.
Dragover: Das Quellobjekt bewegt sich innerhalb des Geltungsbereichs des Prozessobjekts.
dragleave: Das Quellobjekt verlässt den Gültigkeitsbereich des Prozessobjekts.
Zielobjekt:
Drop: Das Quellobjekt wird per Drag & Drop in das Zielobjekt gezogen.
<p id="source" draggable="true">a元素</p> <p id="process">b元素</p> <p id="target">c元素</p> <script> var source = document.getElementById('source'), // a元素 process = document.getElementById('process'), // b元素 target = document.getElementById('target'); // c元素 source.addEventListener('dragstart',function(ev){ // dragstart事件由a元素产生 console.log('a元素开始被拖动'); },false) process.addEventListener('dragenter',function(ev){ // dragenter事件由b元素产生 console.log('a元素开始进入b元素'); },false) process.addEventListener('dragleave',function(ev){ // dragleave事件由b元素产生 console.log('a元素离开b元素'); },false) target.addEventListener('drop',function(ev){ // drop事件由c元素产生 console.log('a元素拖放到c元素了'); ev.preventDefault(); },false) document.ondragover = function(e){e.preventDefault();} </script>
dataTransfer-Objekt
Stellt ein Datenübertragungsobjekt in allen Drag-and-Drop-Ereignissen dataTransfer bereit , wird zum Übertragen von Daten zwischen Quellobjekten und Zielobjekten verwendet. Als Nächstes lernen wir die Methoden und Eigenschaften dieses Objekts kennen, um zu verstehen, wie es Daten überträgt.
setData()
Diese Methode speichert Daten im dataTransfer-Objekt. Empfängt zwei Parameter. Der erste ist eine Zeichenfolge, die den Typ der zu speichernden Daten angibt. Derzeit werden die folgenden Typen unterstützt:
text/plain: Text.
text/html: HTML-Text.
text/xml: XML-Text.
text/uri-list: URL-Liste, jede URL ist eine Zeile.
Der zweite Parameter sind die zu speichernden Daten. Zum Beispiel:
event.dataTransfer.setData('text/plain','Hello World');
getData()
Diese Methode liest Daten aus dem dataTransfer-Objekt. Der Parameter ist der in setData angegebene Datentyp. Zum Beispiel:
event.dataTransfer.getData('text/plain');
clearData()
Diese Methode löscht die im dataTransfer-Objekt gespeicherten Daten. Der Parameter ist optional und entspricht dem Datentyp. Wenn der Parameter leer ist, werden alle Datentypen gelöscht. Zum Beispiel:
event.dataTransfer.clearData();
setDragImage()
Diese Methode legt das Drag-and-Drop-Symbol mithilfe des img-Elements fest. Empfängt drei Parameter, der erste ist das Symbolelement, der zweite ist die X-Achsenverschiebung des Symbolelements vom Mauszeiger und der dritte ist die Y-Achsenverschiebung des Symbolelements vom Mauszeiger. Zum Beispiel:
var source = document.getElementById('source'), icon = document.createElement('img'); icon.src = 'img.png'; source.addEventListener('dragstart',function(ev){ ev.dataTransfer.setDragImage(icon,-10,-10) },false)
effectAllowed- und dropEffect-Eigenschaften
Diese beiden Eigenschaften werden kombiniert, um den visuellen Effekt von Drag and festzulegen fallen.
Es ist erwähnenswert: IE unterstützt keine dataTransfer-Objekte. Ja, es wird unabhängig von der IE-Version nicht unterstützt.
Drag-and-Drop-Sortierung implementieren
Die oben genannten Personen sind bereits mit der Verwendung der Drag-and-Drop-API vertraut. Lassen Sie uns ein einfaches Drag-and-Drop implementieren Sortieren, was auch in Projekten üblich ist. Lassen Sie uns zunächst die Idee klären:
In einer Liste kann jedes Element per Drag-and-Drop verschoben werden. Dann müssen Sie zunächst das Draggable-Attribut für jedes Element auf true setzen.
Hören Sie sich das Dragstart-Ereignis jedes Elements an und formatieren Sie das Quellobjekt, um es zu unterscheiden.
Hören Sie sich das Dragenter-Ereignis jedes Elements an. Wenn das Quellobjekt in das aktuelle Element eintritt, fügen Sie das Quellobjekt vor dem Element hinzu. Auf diese Weise werden die folgenden Elemente vom Quellobjekt herausgedrückt, wodurch ein Sortiereffekt erzielt wird.
Aber Sie werden feststellen, dass das Quellobjekt nicht an letzter Stelle, sondern nur an vorletzter Stelle stehen kann. Zu diesem Zeitpunkt müssen Sie das Dragleave-Ereignis abhören. Wenn das Prozessobjekt das letzte Element ist, verlässt das Quellobjekt das Prozessobjekt und fügt dann das Quellobjekt am Ende hinzu.
Der Hauptcode lautet wie folgt:
var source = document.querySelectorAll('.list'), dragElement = null; for(var i = 0; i < source.length; i++){ source[i].addEventListener('dragstart',function(ev){ dragElement = this; },false); source[i].addEventListener('dragenter', function(ev){ if(dragElement != this){ this.parentNode.insertBefore(dragElement,this); } }, false) source[i].addEventListener('dragleave', function(ev){ if(dragElement != this){ if(this == this.parentNode.lastElementChild || this == this.parentNode.lastChild){ this.parentNode.appendChild(dragElement); } } }, false) }; document.ondragover = function(e){e.preventDefault();} document.ondrop = function(e){e.preventDefault();}
Vollständige Codeadresse: Drag-Demo
Kompatibel
Hauptsächlich, weil die Kompatibilität im IE nicht sehr gut ist, aber zumindest mit der oben genannten Drag-Sortierung in IE10 kompatibel ist.
Und in meinem einfachen Experiment habe ich festgestellt, dass das Dragleave-Ereignis nicht ausgelöst wird, wenn die Höhe des Elements im IE nicht festgelegt ist.
Der wichtigere Punkt ist, dass sie auf iOS und Android völlig inkompatibel sind. Glücklicherweise gibt es ein Plug-in, das die perfekte Kompatibilität mit mobilen Geräten ermöglicht.
Plug-in-Adresse: ios-html5-drag-drop-shim
只需要在原有的代码中引入该插件,即可在移动端上实现拖动了。
<script> var iosDragDropShim = { enableEnterLeave: true } </script> <script src="vendor/ios-drag-drop.js"></script>
Das obige ist der detaillierte Inhalt vonHTML5-Tutorial zur Implementierung der Drag-and-Drop-Sortierung über die API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!