Tatsächlich fügt HTML5 nur einige nützliche APIs hinzu
Lassen Sie uns einfacher entwickeln
damit wir uns mehr auf die Geschäftslogik konzentrieren können
Die Verwendung dieser APIs ist auch sehr einfach
Aber ich meine Das Gedächtnis ist nicht sehr gut
Also habe ich es in Form eines Blogs aufgezeichnet (Handbuch lustig)
Heute werde ich über diese Drag-API schreiben
Apropos Drag Tatsächlich war die früheste Implementierung der Drag-and-Drop-Funktion IE (IE4).
H5 ist die Drag-and-Drop-Spezifikation, die auf IE-Instanzen basiert.
Im Browser gibt es ein Standard-Drag-and-Drop.
Zum Beispiel , Bilder Ziehen
Ziehen Sie den ausgewählten Text
Ziehen Sie den Link
Der Browser ermöglicht uns standardmäßig das Ziehen von Bildern, Text und Links
Es ist auch möglich, andere Elemente zu ziehen
Nur auf dem Element-Tag Attribut hinzufügen
<p draggable="true"></p>
Wenn dieses Element gezogen wird, zeigt der Browser eine durchsichtige Kopie an
Ereignis ziehen Es sollte in zwei Kategorien unterteilt werden
Eine davon ist das Ereignis ausgelöst durch das gezogene Element
Das andere ist das Ereignis, das durch das Drag-and-Drop-Zielelement ausgelöst wird
<p id="source" draggable="true"></p><p id="target"></p> <!-- 样式略 -->
var source = document.getElementById('source');var target = document.getElementById('target');
Beim Ziehen eines Elements wird das gezogene Element ausgelöst löst die folgenden Ereignisse aus:
Dragstart
Drag
dragend
Wenn die Maus auf das Element klickt und sich zu bewegen beginnt, wird das Dragstart-Ereignis ausgelöst (analog zu Mousedown).
Das Drag-Ereignis wird während des Ziehvorgangs kontinuierlich ausgelöst (analog zu Mousemove)
Wenn die Maus losgelassen wird, um das Ziehen abzubrechen, wird das Dragend-Ereignis (analog zu Mouseup) ausgelöst
source.ondragstart = function(){ console.log('开始拖拽'); }source.ondrag = function(){ console.log('拖拽中'); }source.ondragend = function(){ console.log('拖拽结束'); }
Wenn das gezogene Element auf ein Zielelement gezogen wird, löst das Zielelement die folgenden Ereignisse aus
dragenter
Dragover
Dragleave
Drop
Ziehen Sie das Element auf das Ziel, und das Dragenter-Ereignis wird ausgelöst (analog zum Mouseover)
Wenn sich das gezogene Element auf dem Ziel befindet Element wird das Dragover-Ereignis weiterhin ausgelöst
Zielelement verlassen und Dragleave-Ereignis auslösen (analog zu Mouseout)
Wenn das Element per Drag & Drop in das Zielelement gezogen wird (Maus im Zielelement loslassen) , das Drop-Ereignis wird nicht ausgelöst
target.ondragenter = function(){ console.log('拖动进入目标元素'); }target.ondragover = function(){ console.log('目标元素中拖拽'); }target.ondragleave = function(){ console.log('拖动离开目标元素'); }target.ondrop = function(){ console.log('拖放'); }
Zu diesem Zeitpunkt werden wir feststellen, dass das Element per Drag & Drop verschoben wird in das Zielelement
das Drop-Ereignis wird nicht ausgelöst
Wir haben einen speziellen Cursor (Kreis + Backslash) gesehen
Es bedeutet ungültiges Drag & Drop
Das Drop-Ereignis wird also nicht ausgelöst
Das heißt, Elemente können standardmäßig nicht per Drag & Drop verschoben werden
Solange wir das Standardereignis im Dragover-Ereignis des Zielelements abbrechen, Das Problem kann gelöst werden
target.ondragover = function(e){ console.log('目标元素中拖拽'); e.preventDefault(); //增}
Nur einfaches Ziehen und Ablegen ist bedeutungslos
Wir müssen Daten austauschen
Und der Gegenstand dieses Begriffs Datenaustausch ist der Attribut des EreignisobjektsdataTransfer
Die beiden Kernmethoden von dataTransfer sind setData( ) und getData()
setData() wird zum Festlegen von Daten und getData() zum Empfangen von Daten verwendet
event.dataTransfer.setData('text','some text'); var text = event.dataTransfer.getData('text');//保存在dataTransfer中的数据只能在drop事件处理函数中处理
Wenn wir den ausgewählten Text ziehen
, ruft der Browser standardmäßig dataTransfer auf und legt die entsprechenden Textdaten fest
setData() und getData() sind Zeichenfolgen von Datentypen
Neben dem Texttyp „Text“ umfassen die vom IE definierten Datentypen auch „URL“
H5 ist dafür geeignet. Es wurde erweitert, um verschiedene MIME-Typen anzugeben
Aber aus Gründen der Abwärtskompatibilität , es unterstützt auch „text“ und „URL“
Sie werden „text/plain“ bzw. „text/uri-list“ zugeordnet ”
Wenn die Daten als URL gespeichert werden, wird die Der Browser führt eine spezielle Verarbeitung durch und behandelt ihn als Weblink
(Wenn Sie also den Link in ein anderes Browserfenster ziehen, wird die Webseite geöffnet)
Bei Bedarf können wir die benötigten Daten manuell speichern übertragen werden
var source = document.getElementById('source');var target = document.getElementById('target'); source.ondragstart = function(e){ e.dataTransfer.setData('text','传递文本数据'); } target.ondragover = function(e){ e.preventDefault(); } target.ondrop = function(e){ console.log(e.dataTransfer.getData('text')); }
Es gibt zwei wichtige in dataTransfer Attributes
dropEffect und effectAllowed
dropEffect-Attributwert ist eine Zeichenfolge, die angibt, welche Platzierung das gezogene Element durchführen kann. Verhalten
Um dieses Attribut zu verwenden, müssen Sie
keine im Dragenter-Ereignishandler Elemente können hier nicht per Drag & Drop gezogen werden (Standardwert für alle Elemente außer Textfelder)
Verschieben zum Ziel
Kopie zum Ziel kopieren
Link-Ziel öffnet das Drag-Element (das Drag-Element muss ein Link sein und eine URL haben)
Das effectAllowed-Attribut value ist auch eine Zeichenfolge, die angibt, welcher dropEffect das Element ziehen darf
Um dieses Attribut zu verwenden, müssen Sie es in der Dragst-Ereignishandlerfunktion festlegen
nicht initialisiert Kein Ziehen und Drop-Verhalten ist festgelegt
none kann durch kein Verhalten verursacht werden
kopieren Nur dropEffect-Wert ist zulässig kopieren
Link Nur der DropEffect-Wert ist zulässig. Link
Verschieben ermöglicht nur das Verschieben des DropEffect-Werts.
CopyLink ermöglicht das Kopieren des DropEffect-Werts und verknüpfen
copyMove ermöglicht das Kopieren und Verschieben von dropEffect-Werten
linkMove ermöglicht das Verknüpfen und Verschieben von dropEffect-Werten
alle erlaubt jeden DropEffect
Das obige ist der detaillierte Inhalt vonEine detaillierte Einführung in APIs im Zusammenhang mit dem Drag-and-Drop von HTML5-Elementen (Bilder und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!