1. Plugins Zunächst haben wir uns für das Plugin npm ich vue-grid-layout --speichern Offizielle Website: https://jbaysolutions.github.... 2. Zwischenspiel Nach der Installation der Abhängigkeiten stellte ich fest, dass das Projekt gestartet werden konnte. Laut der offiziellen Website- Ändern Sie Ihre Denkweise und verwenden Sie globale Importkomponenten anstelle von lokalen Importkomponenten. 3. Umsetzungconst layout = ref<LayoutItem[]>([ { x: 0, y: 0, w: 1, h: 1, i: 0 }, { x: 1, y: 0, w: 2, h: 1, i: 1 }, { x: 0, y: 1, w: 2, h: 1, i: 2 }, { x: 0, y: 2, w: 3, h: 1, i: 3 }, { x: 2, y: 1, w: 1, h: 1, i: 4 }, ]); <Raster-Layout :layout="Layout" :Spaltennummer="3" :Zeilenhöhe="240" :ist-draggable="wahr" :ist größenveränderbar="true" :ist-gespiegelt="false" :maxRows="3" :vertical-compact="wahr" :Rand="[10, 10]" :use-css-transforms="wahr" > <Rasterelement v-for="Element im Layout" :x="Artikel.x" :y="Artikel.y" :w="Artikel.w" :h="Artikel.h" :i="Artikel.i" :Schlüssel="Artikel.i" @moved="beimElement verschoben" >{{ Element.i }}</grid-item> </Rasterlayout> Wirkung: Aber! ! denken: Wir müssen eine Prüfung hinzufügen, um zu sehen, ob jede Zeile vollständig ausgefüllt ist. 4. Verifizierungsfunktionimportiere { LayoutItem } aus '../types/index'; importiere { cloneDeep } von 'lodash' /** * Überprüfen Sie, ob das Layout zulässig ist. * 1. Kopieren Sie das Array vollständig, um eine Verunreinigung des Original-Arrays zu vermeiden. * 2. Ermitteln Sie den Maximalwert von y für die Durchquerung. * 3. Holen Sie sich jedes y-Subarray und sortieren Sie es in aufsteigender Reihenfolge von x. * 4. Wenn die Arraylänge 1 beträgt, bestimmen Sie, ob w gleich dem maximalen x ist. * 5. Wenn die Länge des Arrays nicht 1 ist, durchlaufen Sie das Array, um zu bestimmen, ob das w jedes Elements gleich dem x des nächsten Elements ist. Akkumulieren Sie w, um zu bestimmen, ob die Summe gleich dem maximalen x ist. * 6. Wenn zulässig, geben Sie false zurück * @param-Liste * @returns */ export const verifyLayout = (Liste: Array<LayoutItem>): boolean => { yList = list.map(item => { return item.y }); yList = yList.sort((a, b) => { return a - b }); konsole.log(Liste); const newArr = cloneDeep(Liste); lass flag = false; const maxY = yList[yList.Länge - 1]; Konstante maxX = 3; Konsole.log(maxY); für (sei i = 0; i <= maxY; i++) { lass arr = newArr.filter((item: LayoutItem) => { gibt Element.y === i zurück; }); Konsole.log(arr, arr.Länge); wenn (arr && arr.length > 1) { console.log('Mehrere-------------------', i); lassen Sie calValue = 0; arr = arr.sort((a: Layoutelement, b: Layoutelement) => { return ax - bx }) arr.forEach((childItem: LayoutItem, index: number) => { calValue += untergeordnetesItem.w; console.log('Kalkulationswert--------------', Kalkulationswert, Index); wenn (Index !== arr.Länge - 1 und calValue !== arr[Index + 1].x) { Flagge = wahr; } wenn (index === arr.length - 1 und calValue !== maxX) { Flagge = wahr; } }) } anders { console.log('Es gibt nur einen------------------', i); wenn (arr[0].w !== maxX) { Flagge = wahr } } } Konsole.log(Flag); Flagge zurückgeben; } Die Idee ist mein Kommentar zur Funktion. /** * Drag-Completion-Ereignis* 1. Speichern Sie die vorherigen Daten in den Verlaufsdaten* 2. Speichern Sie dann die Daten nach der Verschiebung in den Nowlayout-Daten*/ const onItemMoved = () => { console.log('verschoben--------------------') historyDataList.value.push(cloneDeep(jetztLayoutData.value)); jetztLayoutData.value = cloneDeep(layout.value); // const flag = verifyLayout(layout.value); // wenn (Flagge) { // geh zurück() // } }; const goBack = () => { Konsole.log(historyDataList.value[historyDataList.value.length - 1]); layout.value = historyDataList.value[historyDataList.value.length - 1]; jetztLayoutData.value = cloneDeep(layout.value); historyDataList.value.pop(); } Auf diese Weise führen wir bei jedem Ziehen und Ablegen, wenn die Überprüfung nicht zulässig ist, ein Rollback durch, um sicherzustellen, dass jede Zeile ausgefüllt ist! ! ! ! Dies ist das Ende dieses Artikels über Vue3.0, das das Plug-In „vue-grid-layout“ verwendet, um Drag-and-Drop-Layouts zu implementieren. Weitere verwandte Vue3-Inhalte, die das Plug-In „vue-grid-layout“ verwenden, um Drag-and-Drop-Layoutinhalte zu implementieren, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Einführung in semantische HTML-Tags
>>: Zusammenfassung der Kompatibilitätsprobleme beim Flex-Layout
Netzwerk-Ports freigeben Tatsächlich gibt es in D...
1. Benutzerdefinierte Textauswahl ::Auswahl { Hin...
Vorwort Vue Router ist der offizielle Routing-Man...
1. Einleitung Heute hat mich ein Kollege gefragt,...
Konfigurationsbeispiel Upstream-Backend { Server ...
Was ist MySQL Multi-Instance Einfach ausgedrückt ...
1. Überprüfen und installieren Sie pssh, yum list...
Inhaltsverzeichnis Grundkonfiguration Eintragsdat...
Inhaltsverzeichnis 1. Optionale Verkettung 2. Nul...
Im vorherigen Artikel wurde die MySql-Abfrageanwe...
Inhaltsverzeichnis 1. Einleitung 2. Szenario 3. S...
Mithilfe der Vue-Sprache und Elementkomponenten m...
Das Beste, was Sie für Ihre Daten und Computer tu...
<br />Von der Geburt meiner ersten persönlic...
Unter Ubuntu 18.04 1. sudo apt install python ins...