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

Grundlegende Operationen der MySQL-Lernnotizentabelle

Tabelle erstellen Tabelle erstellen Tabellenname ...

Sammlung von 25 Schriftarten, die in berühmten Website-Logos verwendet werden

In diesem Artikel sind die Schriftarten zusammeng...

Wie besteht man die W3C-Validierung?

Neben der Festlegung von Vorschriften für verschi...

MySQL 8.0.25 Installations- und Konfigurations-Tutorial unter Linux

Das neueste Tutorial zur Installation von MySQL 8...

Tutorial zu HTML-Tabellen-Tags (13): Regeln für interne Rahmenstilattribute

Mit REGELN kann die Art der inneren Rahmen der Ta...

Details zur Destrukturierungszuweisung in Javascript

Inhaltsverzeichnis 1. Array-Dekonstruktion 2. Obj...

Parsen des Linux-Quellcodes epoll

Inhaltsverzeichnis 1. Einleitung 2. Einfaches Epo...