Vue implementiert das Ziehen und Sortieren von Bildern

Vue implementiert das Ziehen und Sortieren von Bildern

In diesem Artikelbeispiel wird der spezifische Code von Vue zur Implementierung des Ziehens und Sortierens von Bildern zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt

Prinzip: Es gibt eine Liste mit Bildern. Ziehen Sie eines der Bilder (Auslösen von „Dragstart“). Wenn das gezogene Bild an die Position anderer Bilder verschoben wird (Auslösen von „Dragover“), wird das gezogene Bild von seiner ursprünglichen Position an diese Position verschoben (Auslösen von „Dragend“).

dragstart: Das dragstart-Ereignis wird ausgelöst, wenn der Benutzer beginnt, ein Element oder eine Textauswahl zu ziehen.

Dragover: Wenn ein Element oder ausgewählter Text über ein gültiges Ablageziel gezogen wird, wird das Dragover-Ereignis ausgelöst (alle paar hundert Millisekunden).

dragend: Das Drag & Drop-Ereignis wird ausgelöst, wenn der Drag & Drop-Vorgang endet. (Wir brauchen es hier nicht)

(1) HTML-Struktur der Bilderliste . Fügen Sie dem Element, das gezogen werden muss, das Attribut „draggable“ hinzu. Bitte beachten Sie hier: Der Schlüsselwert der Vorlage für die Schleife muss eindeutig sein, da Vue beim Rendern die direkte Wiederverwendung verwendet. Wenn der Schlüsselwert eindeutig ist, werden die nach der Neuanordnung gerenderten Listenknoten nicht wiederverwendet, wodurch einige Probleme vermieden werden können. (Beim Einfügen fügen wir bestimmte Daten entsprechend der Sequenznummer in das Array ein.)

 <ul Klasse="Container ziehen" 
            @dragstart="beimDragStart"
            @dragover="beimDragOver"
            @dragend="beiDragEnde"
            ref="imgList">
            <li 
            v-for="(Element, IDX) in Liste" 
            :Schlüssel='Element.Pfad'
            Klasse = "Drag-Liste" 
            ziehbar="true" 
            >
                <img :src="item.path" alt="" />
            </li>
</ul>

(2) Ereignisse : dragstart, dragover Bindungsereignisse onDragStart, onDragOver

onDragStart: Identifiziert das zu ziehende Element und speichert es im Status zur Verwendung durch das Dragover-Bindungsereignis während des Ziehvorgangs.

onDragStart(Ereignis){
            console.log("starten");
            dies.draging = Ereignis.Ziel;
        },

onDragOver: Das Event wird ausgelöst, wenn sich das Element beim Ziehen auf einem gültigen Ziel befindet. Anstelle des gezogenen Elements wird das Zielelement identifiziert. Identifizieren Sie zunächst, ob das Zielelement das von uns benötigte Zielelement ist. Bestimmen Sie in unserem Beispiel, ob es sich um ein li-Element handelt, und stellen Sie fest, ob das Bild mit dem gezogenen identisch ist. Fügen Sie dann das gezogene Element ein.
Identifizieren Sie die Positionsnummern des gezogenen Elements und des Zielelements, fügen Sie das gezogene Element vor dem Zielelement ein und löschen Sie dann die Daten an der ursprünglichen Position des gezogenen Elements. In Vue müssen Sie nur Datenoperationen durchführen.

onDragOver(Ereignis){
            console.log('ziehen/verschieben')
            event.preventDefault();
            sei Ziel = Ereignis.Ziel;
                // Da Dragover auf ul auftritt, muss festgestellt werden, ob es sich um li handelt
            wenn (target.nodeName === "LI" und 
                target.childNodes[0].src !== this.draging.childNodes[0].src) {
                lass idx_drag = this._index(this.dragging)
                lass idx_target = this._index(ziel)
                let _list = diese.liste
                let _drag = diese.Liste[idx_drag]
                wenn(idx_drag>idx_target){
                    _list.splice(idx_target,0,_list[idx_drag]);
                    _list.splice(idx_drag+1,1)
                }anders{
                    _list.splice(idx_target+1,0,_list[idx_drag]);
                    _list.splice(idx_drag,1)
                }
                konsole.log(_list[0].Pfad)
                dies.$emit("ändern", _list)
            }
        },

Der vollständige Code lautet wie folgt:

<Vorlage>
    <div Klasse="Bildliste" v-if="Liste && Listenlänge">
        <ul Klasse="Container ziehen" 
        @dragstart="beimDragStart"
        @dragover="beimDragOver"
        @dragend="beiDragEnde"
        ref="imgList">
            <li 
            v-for="(Element, IDX) in Liste" 
            :Schlüssel='Element.Pfad'
            Klasse = "Drag-Liste" 
            ziehbar="true" 
            >
                <img :src="item.path" alt="" />
            </li>
        </ul>
    </div>
</Vorlage>
<Skript>
Standard exportieren {
    Name: „Bildliste ziehen“,
    Requisiten:{
        Liste: Array,
    },
    Daten(){
        zurückkehren {
            dragging:null, //Das Objekt, das gezogen wird}
    },
    Methoden:{
        onDragStart(Ereignis){
            console.log("starten");
            dies.draging = Ereignis.Ziel;
        },   
        onDragOver(Ereignis){
            console.log('ziehen/verschieben')
            event.preventDefault();
            sei Ziel = Ereignis.Ziel;
                // Da Dragover auf ul auftritt, muss festgestellt werden, ob es sich um li handelt
            wenn (target.nodeName === "LI" && target.childNodes[0].src !== this.draging.childNodes[0].src) {
                lass idx_drag = this._index(this.dragging)
                lass idx_target = this._index(ziel)
                let _list = diese.liste
                let _drag = diese.Liste[idx_drag]
                wenn(idx_drag>idx_target){
                    _list.splice(idx_target,0,_list[idx_drag]);
                    _list.splice(idx_drag+1,1)
                }anders{
                    _list.splice(idx_target+1,0,_list[idx_drag]);
                    _list.splice(idx_drag,1)
                }
                konsole.log(_list[0].Pfad)
            }
        },
        onDragEnd(Ereignis){
            console.log('Ereignis beenden')
        },
        _index(el){
            Var-Index = 0;
            wenn (!el || !el.parentNode) {
                Rückgabe -1;
            }
            während (el && (el = el.vorherigesElementGeschwister)) {
                Index++;
            }
            Rückgabeindex;
        },
    }
}
</Skript>

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Das Vue-Plugin Draggable realisiert die Reihenfolge beim Ziehen und Verschieben von Bildern
  • Detaillierte Erklärung zur Verwendung von vuedraggable, einem Drag-and-Drop-Sortier-Plugin für Vue
  • Die Vue-Komponente Draggable implementiert die Drag-Funktion
  • So ziehen Sie Bilder zum Sortieren in Vue.Draggable

<<:  So stellen Sie per SSH eine Verbindung zum Docker-Server her

>>:  So vermeiden Sie Datenschleifenkonflikte, wenn MySQL mit Dual-Master konfiguriert ist

Artikel empfehlen

CSS float (float, clear) beliebte Erklärung und Erfahrungsaustausch

Ich bin schon vor langer Zeit mit CSS in Berührun...

Tutorial zur Änderung des Root-Passworts in MySQL 5.6

1. Nach der Installation von MySQL 5.6 kann es ni...

mySql SQL-Abfrageoperation für statistische Mengen

Ich werde nicht viel Unsinn erzählen, schauen wir...

Teilen Sie die 15 besten HTML/CSS-Design- und Entwicklungsframeworks

Professionelles Webdesign ist komplex und zeitint...

Einführung in die Installation des Vim-Plugins unter Linux

Inhaltsverzeichnis Installieren Sie den Vim-Plugi...

So konfigurieren Sie den Runner-Container in Docker

1. Erstellen Sie einen Runner-Container mk@mk-pc:...

Beispiele für personalisiertes und kreatives Website-Design (30)

Aus diesem Grund haben wir eine Auswahl von 30 Kom...

Optimierung der Datenbank-SQL-Anweisung

Warum optimieren: Beim Start des eigentlichen Pro...

Verwendung von Kubernetes YAML-Dateien

Inhaltsverzeichnis 01 Einführung in YAML-Dateien ...

Grafisches Tutorial zur Installation und Konfiguration der MySQL-Version 8.0.24

Dieser Artikel zeichnet die Installations- und Ko...

So erstellen Sie schnell einen FTP-Dateidienst mit FileZilla

Um die Speicherung und den Zugriff auf Dateien zu...

Der Unterschied und die Einführung von ARGB, RGB und RGBA

ARGB ist ein Farbmodus, also der RGB-Farbmodus mi...