In diesem Artikel wird der spezifische Code von Vue zur Implementierung des Ziehens von mehrspaltigen Layouts zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt 1. ZieleVue implementiert freies Ziehen und Ändern der Breite mehrerer Boxen (Benutzer entscheiden anhand tatsächlicher Szenarien über die Anzahl der Boxen). 2. AnwendungsszenarienMehrspaltiges Layout mit frei verschiebbarer Breite. Der typischste Fall: Editor (z. B. vscode, idea usw.) KomponentendesignDa die Anzahl der Boxen dieser Komponente ungewiss ist, haben wir uns beim Entwurf der Komponente an dem Design von Form und FormItem in Vuetify orientiert. Das heißt, die äußere große Box verarbeitet die verteilten Drag-Ereignisse und die innere Box ist für die Anzeige des Inhalts jedes Elements verantwortlich. Durch die Komponentenkonstruktion werden folgende Ziele erreicht: <drag-box style="Breite: 100 %; Höhe: 100 %;"> <drag-item>Element1</drag-item> <drag-item>Element2</drag-item> <drag-item>Element3</drag-item> <drag-item>Element4</drag-item> </Drag-Box> 4. Umsetzung4.1 statische DragBox-Seite (Die Verschachtelung von Unterelementen wird durch Schlitze erreicht) <Vorlage> <div ref='dragBox' style='Anzeige: flex; Breite: 100 %; Höhe: 100 %;'> <Steckplatz></Steckplatz> </div> </Vorlage> 4.2 DragItem-Seite (Die Verschachtelung interner Drag-Item-Elemente wird durch Slots erreicht) <Vorlage> <div ref="Container" Klasse="d-flex" Stil="min-width: 200px; Position: relativ;"> <div style="Breite: 100 %; Höhe: 100 %;"> <slot>Standardinformationen</slot> </div> <!-- Zugleiste --> <div v-if="Größe ändernAnzeigen" class="Größe ändern" /> </div> </Vorlage> <Skript> Standard exportieren { Requisiten: { // Steuert, ob die Ziehleiste angezeigt wird. Standardmäßig wird resizeShow: { angezeigt. Typ: Boolean, Standard: true } } } </Skript> <Stil> .Größe ändern { Position: absolut; oben: 0; rechts: 0; Breite: 4px; Höhe: 100%; Cursor: Spaltengröße ändern; Hintergrundfarbe: #d6d6d6; } </Stil> 4.3 Drag-Logik Die Drag-Logik sollte von dragBox und nicht von dragItem gehandhabt werden. 4.3.1 Vor der Implementierung des Ziehens sollten untergeordnete Elemente (z. B. DragItem) richtig angeordnet werden. Wenn der Benutzer dem DragItem keine Anfangsbreite zuweist , wird der Standardwert „flex:1“ verwendet (der verbleibende Platz wird gleichmäßig verteilt). Die konkrete Logik lautet wie folgt: // Wenn dragItem keine Breite definiert, flex=1 setDragItemFlex () { const dragBox = this.$refs.dragBox const childrenLen = dragBox.children.length für (sei i = 0; i < Kinderlänge; i++) { const node = dragBox.Kinder[i] wenn (!node.style.width) { // Wenn die Breite nicht definiert ist, ist Flex=1 node.style.flex = 1 } } }, 4.3.2 Drag & Drop-Implementierungslogik Für die Drag-Leiste jedes DragItems sollten Drag-Ereignisse hinzugefügt werden. Das vollständige Ziehereignis umfasst: Drücken der Maus, Bewegen der Maus und Anheben der Maus (Ende des Ziehens). Schleife, um Ereignisse für jeden Drag Bar hinzuzufügen: dragControllerDiv () { const resize = document.getElementsByClassName('resize') // Drag Bar // Schleife zum Hinzufügen von Ereignissen für jede Drag Bar for (let i = 0; i < resize.length; i++) { // Mausklick-Ereignis resize[i].addEventListener('mousedown', this.onMouseDown) } }, Logik beim Mausklick: Rufen Sie die Anfangsposition der Maus ab, ändern Sie die Farbe der Ziehleiste und fügen Sie Listener-Ereignisse für Bewegung und Aufwärtsbewegung hinzu. beiMausDrücken (e) { diese.resizeBox = e.target this.currentBox = this.resizeBox.parentNode // Aktuelle Box this.rightBox = this.getNextElement(this.currentBox) // Nächster Geschwisterknoten der aktuellen Box if (!this.rightBox) return this.curLen = this.currentBox.clientWidth this.otherBoxWidth = this.$refs.dragBox.clientWidth - this.currentBox.clientWidth - this.rightBox.clientWidth // Breite anderer Boxen // Erinnerung an Farbänderung this.resizeBox.style.background = '#818181' this.startX = e.clientX document.addEventListener('Mausbewegung', this.onMousemove) document.addEventListener('mouseup', this.onMouseup) }, // Hole das nächste Geschwisterelement kompatible Funktion getNextElement (Element) { wenn (element.nächstesElementGeschwister) { returniere element.nextElementSibling } anders { var next = element.nextSibling // Nächster Geschwisterknoten while (next && next.nodeType !== 1) { // Er existiert, aber es ist nicht das, was ich will next = next.nextSibling } Zurück Weiter } } Mausbewegungsereignis: Berechnen und Festlegen der Breite des aktuellen Felds und des rechten Felds. beiMausbewegung (e) { const endX = e.clientX const moveLen = endX - this.startX // (endx-startx) = Bewegungsdistanz const CurBoxLen = this.curLen + moveLen // resize[i].left + Bewegungsdistanz = endgültige Breite des linken Bereichs const rightBoxLen = this.$refs.dragBox.clientWidth - CurBoxLen - this.otherBoxWidth // Rechte Breite = Gesamtbreite - linke Breite - Breite der anderen Box // Wenn die Mindestbreite erreicht ist, ist Ziehen nicht verfügbar if (CurBoxLen <= 200 || rightBoxLen <= 200) return this.currentBox.style.width = CurBoxLen + 'px' // Aktuelle Boxbreite this.resizeBox.style.left = CurBoxLen // Breite des linken Bereichs festlegen this.rightBox.style.width = rightBoxLen + 'px' }, Mouse-Up-Ereignis: Zerstört Mousedown- und Mousemove-Ereignisse; stellt die Farbe der Drag-Bar wieder her. bei Mauszeiger hoch () { // Farbwiederherstellung this.resizeBox.style.background = '#d6d6d6' document.removeEventListener('mousedown', this.onMouseDown) document.removeEventListener('Mausbewegung', this.onMousemove) }, Fügen Sie der gemounteten Hook-Funktion entsprechende Ereignisse hinzu. montiert () { dies.setDragItemFlex() dies.dragControllerDiv() }, Importieren und registrieren Sie die Komponente: <Vorlage> <div id="app" style="Breite: 100 %; Höhe: 100vh; Rahmen: 1px durchgezogen #ccc;"> <drag-box style="Breite: 100 %; Höhe: 100 %;"> <drag-item style="width: 20%;">Artikel1</drag-item> <drag-item>Element2</drag-item> <drag-item style="width: 20%;" :resizeShow='false'>Artikel3</drag-item> </Drag-Box> </div> </Vorlage> <Skript> importiere {DragBox, DragItem} aus './components/dragLayouter' Standard exportieren { Name: "App", Komponenten: Ziehen Sie die Box, Ziehen Sie ein Element } } </Skript> 5. Ergebnisse der OperationDer konkrete Stil kann später noch geändert werden. 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:
|
<<: Bringen Sie Ihnen bei, wie Sie einen Tencent Cloud Server erstellen (grafisches Tutorial)
>>: So überprüfen Sie, ob MySQL erfolgreich installiert wurde
1 Erstellen Sie einen Benutzer und geben Sie den ...
Inhaltsverzeichnis Hintergrund DHCP konfigurieren...
Umfeld Host-IP 192.168.0.9 Docker-Version 19.03.2...
In diesem Artikelbeispiel wird der spezifische Co...
Wir alle wissen, dass wir die Eigenschaften der P...
MySQL ist ein relationales Datenbankverwaltungssy...
Bei der Optimierung der Datenbankleistung wird im...
Ziel dieses Artikels ist es, die Beziehung zwisch...
Mixins bieten eine sehr flexible Möglichkeit, wie...
Docker-Version 1.13.1 Problemprozess Ein MySQL-Co...
In diesem Artikel wird hauptsächlich die Installa...
Inhaltsverzeichnis Vorwort Fall Optimierung Zusam...
Hintergrund Kürzlich wollte ein Leiter, dass wir ...
Inhaltsverzeichnis Nginx fungiert als Proxy für z...
In diesem Artikelbeispiel wird der spezifische Co...