Heim Web-Frontend H5-Tutorial H5-Drag-and-Drop-API für Drag-and-Drop-Sortierung

H5-Drag-and-Drop-API für Drag-and-Drop-Sortierung

Mar 26, 2018 pm 04:02 PM
api html5 排序

Dieses Mal stelle ich Ihnen die H5-Drag-and-Drop-API für die Drag-and-Drop-Sortierung vor. Was sind die Vorsichtsmaßnahmen für die H5-Drag-and-Drop-API für die Drag-and-Drop-Sortierung? , lass uns einen Blick darauf werfen.

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 ziehbare -Attribut des Elements auf „true“ setzen. Wenn dieses 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, bevor es schließlich das Element erreicht, 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. Unterschiedliche Objekte erzeugen unterschiedliche Drag-and-Drop-Ereignisse.

Quellobjekt:

  1. Dragstart: Das Quellobjekt beginnt mit dem Ziehen und Ablegen.

  2. Ziehen: Während des Drag-and-Drop-Vorgangs des Quellobjekts.

  3. dragend: Das Drag & Drop des Quellobjekts endet.

Prozessobjekt:

  1. dragenter: Das Quellobjekt beginnt, in den Bereich des Prozessobjekts einzutreten.

  2. Dragover: Das Quellobjekt bewegt sich innerhalb des Geltungsbereichs des Prozessobjekts.

  3. dragleave: Das Quellobjekt verlässt den Gültigkeitsbereich des Prozessobjekts.

Zielobjekt:

  1. 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>
Nach dem Login kopieren

dataTransfer-Objekt

Stellt ein Datenübertragungsobjekt dataTransfer in allen Drag-and-Drop-Ereignissen bereit, das für die Übertragung zwischen dem Quellobjekt und verwendet wird das Ziel Daten zwischen Objekten weitergeben. 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:

  1. text/plain: Text .

  2. text/html: HTML-Text.

  3. text/xml: XML-Text.

  4. 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');
Nach dem Login kopieren

getData()

Diese Methode liest Daten aus dem dataTransfer-Objekt. Der Parameter ist der in setData angegebene Datentyp. Zum Beispiel:

event.dataTransfer.getData('text/plain');
Nach dem Login kopieren

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();
Nach dem Login kopieren

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)
Nach dem Login kopieren

effectAllowed- und dropEffect-Attribute

Diese beiden Attribute werden kombiniert, um den visuellen Effekt von Drag & Drop festzulegen.

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:

  1. 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.

  2. Hören Sie sich das Dragstart-Ereignis jedes Elements an und formatieren Sie das Quellobjekt, um es zu unterscheiden.

  3. 监听每个元素的 dragenter 事件,当源对象进入到当前元素里,就把源对象添加到该元素之前。这样子后面的元素就会被源对象挤下去了,实现了排序的效果。

  4. 但是会发现,源对象无法排到最后一个去,只能在倒数第二。这时就要监听 dragleave 事件,当过程对象是最后一个元素时,源对象离开了过程对象,这时就把源对象添加到最后去。

主要代码如下:

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();}
Nach dem Login kopieren

完整的代码地址:drag-demo 

兼容

主要是在IE中的兼容不太好,不过至少在IE10中能兼容上面的拖动排序。

而且在我简单的试验中发现,就是在 IE 中元素不设置 height 的时候,不会触发 dragleave 事件。

更重要的一点是在 ios 和安卓上,完全不兼容。不过还好,有一个插件能让它在移动端完美兼容。  

插件地址:ios-html5-drag-drop-shim    

只需要在原有的代码中引入该插件,即可在移动端上实现拖动了。

<script>
var iosDragDropShim = { enableEnterLeave: true }
</script>
<script src="vendor/ios-drag-drop.js"></script>
Nach dem Login kopieren

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

前端页面跳转并取值的实现

H5的多线程(Worker SharedWorker)使用详解

Das obige ist der detaillierte Inhalt vonH5-Drag-and-Drop-API für Drag-and-Drop-Sortierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tabellenrahmen in HTML Tabellenrahmen in HTML Sep 04, 2024 pm 04:49 PM

Anleitung zum Tabellenrahmen in HTML. Hier besprechen wir verschiedene Möglichkeiten zum Definieren von Tabellenrändern anhand von Beispielen für den Tabellenrand in HTML.

HTML-Rand links HTML-Rand links Sep 04, 2024 pm 04:48 PM

Anleitung zum HTML-Rand links. Hier besprechen wir einen kurzen Überblick über HTML margin-left und seine Beispiele sowie seine Code-Implementierung.

Verschachtelte Tabelle in HTML Verschachtelte Tabelle in HTML Sep 04, 2024 pm 04:49 PM

Dies ist eine Anleitung für verschachtelte Tabellen in HTML. Hier diskutieren wir anhand der entsprechenden Beispiele, wie man eine Tabelle innerhalb der Tabelle erstellt.

HTML-Tabellenlayout HTML-Tabellenlayout Sep 04, 2024 pm 04:54 PM

Leitfaden zum HTML-Tabellenlayout. Hier besprechen wir die Werte des HTML-Tabellenlayouts zusammen mit den Beispielen und Ausgaben im Detail.

HTML-Eingabeplatzhalter HTML-Eingabeplatzhalter Sep 04, 2024 pm 04:54 PM

Leitfaden für HTML-Eingabeplatzhalter. Hier besprechen wir die Beispiele für HTML-Eingabeplatzhalter zusammen mit den Codes und Ausgaben.

HTML-geordnete Liste HTML-geordnete Liste Sep 04, 2024 pm 04:43 PM

Leitfaden zur HTML-geordneten Liste. Hier besprechen wir auch die Einführung von HTML-geordneten Listen und Typen sowie deren Beispiele

Text in HTML verschieben Text in HTML verschieben Sep 04, 2024 pm 04:45 PM

Anleitung zum Verschieben von Text in HTML. Hier besprechen wir eine Einführung, wie Marquee-Tags funktionieren, mit Syntax und Beispielen für die Implementierung.

HTML-Onclick-Button HTML-Onclick-Button Sep 04, 2024 pm 04:49 PM

Anleitung zum HTML-OnClick-Button. Hier diskutieren wir deren Einführung, Funktionsweise, Beispiele und Onclick-Events in verschiedenen Veranstaltungen.

See all articles