Wenn die erstellte Registerkartenbeschriftung den sichtbaren Bereich der Seite überschreitet, wird automatisch eine Registerkartenbeschriftungsdistanz gescrollt, und Sie können klicken, um die Registerkartenbeschriftung manuell zu scrollen. Den Effekt sehen Sie im GIF-Bild. Effektvorschau GIF <Vorlage> <div Klasse="Hauptbox"> <button @click="add">Hinzufügen</button> <div Klasse="Haupt-Box-Tab"> <i @click="vorheriges"><<</i> <i @click="weiter">>></i> <div Klasse="Haupt-Box-Tab-Inhalt" ref="Tabs"> <div Klasse="main-box-tab-roll"> <div v-for="(Element, Index) in Tabs" :Schlüssel="Index" :Klasse="{'tab-item-action':actionName === item.name ,'tab-item':actionName !== item.name}" @click.stop="KlickTab(Elementname,Index)"> <span>{{item.meta.title}}</span> <i class="el-icon-close" @click.stop="schließen(item.name)"></i> </div> </div> </div> </div> <div Klasse="Hauptbox-Inhalt"> <div>{{Aktionsname}}</div> </div> </div> </Vorlage> <Skript> Standard exportieren { Name: "Index", Daten() { zurückkehren { Registerkarten: [], BewegungX: 0, Anzahl: 1, unbesetzt: 0, Anzahl der Tabs: 0, Aktionsname: "test1" } }, betrachten: Aktionsname(Wert) { lass len = this.tabs.length // Wenn doppelte Daten vorhanden sind, beenden Sie die nachfolgende Funktionsausführung for (let i = 0; i < len; i++) { wenn (diese.tabs[i].name === val) { dies.$nextTick(() => { dies.translateX((i + 1 - dies.tabsCount) * dies.width - dies.unoccupied) }) zurückkehren } } dies.tabs.push({ Name: `test${this.count}`, Meta: { Titel: `test${this.count}` } }) dies.$nextTick(() => { // (Wie viele Registerkarten gibt es insgesamt – die Anzahl der Elemente, die sichtbar sind, wenn sie nicht versetzt sind) * Länge eines einzelnen Registerkartenbeschriftungselements – Breite des sichtbaren Teils des verdeckten Registerkartenelements this.translateX((this.tabs.length – this.tabsCount) * this.width – this.unoccupied) }) } }, montiert() { dies.tabs.push({ Name: `test${this.count}`, Meta: { Titel: `test${this.count}` } }) dies.$nextTick(() => { let tabs = dies.$refs.tabs let getStyle = getComputedStyle(tabs.children[0].children[0], null) let marginLeft = parseFloat(getStyle.marginLeft.substr(0, getStyle.marginLeft.length - 2)) let marginRight = parseFloat(getStyle.marginRight.substr(0, getStyle.marginRight.length - 2)) // Tatsächliche Breite des Elements = Elementbreite + Rand this.width = marginLeft + marginRight + tabs.children[0].children[0].offsetWidth /** * Die folgende Kommentarberechnungsmethode wird verwendet, um die Implementierungslogik zu verstehen**/ // // Wie viele Elemente können im sichtbaren Bereich platziert werden = Breite des sichtbaren Bereichs / tatsächliche Breite des Unterelements // let num = tabs.offsetWidth / this.width // // Die Breite des sichtbaren Teils des verdeckten Registerkartenelements = die Breite des sichtbaren Bereichs - (tatsächliche Breite des untergeordneten Elements * in eine Ganzzahl umgewandelte Zahl) // this.unoccupied = tabs.offsetWidth - (this.width * parseInt(num)) //Zum Schluss zum Rest vereinfacht (das Ergebnis ist das gleiche wie bei der Berechnung oben) dies.unbesetzt = tabs.offsetWidth % dies.width // In Ganzzahl umwandeln this.tabsCount = parseInt(tabs.offsetWidth / this.width) }) }, Methoden: { hinzufügen() { dies.zählen++ this.actionName = `test${this.count}` }, /** * Registerkarte wechseln**/ KlickTab(Name) { wenn (dieser.Aktionsname !== Name) { this.actionName = Name } }, /** * Schließen Sie die Registerkarte**/ schließen(Name) { lass len = this.tabs.length let jumpName = null wenn (Länge > 1) { für (sei i = 0; i < len; i++) { wenn (diese.tabs[i].name === name) { dies.tabs.splice(i, 1) Sprungname = diese.Tabs[i ? i - 1 : 0].Name wenn (dieser.Aktionsname !== Sprungname && Name === dieser.Aktionsname) { this.actionName = Sprungname } dies.$nextTick(() => { dies.vorheriges() }) zurückkehren } } } }, /** * Nach rechts verschieben**/ nächste() { // scrollWidth ist nicht genau // Verwenden Sie this.width * this.tabs.length um die Gesamtlänge zu berechnen let totalWidth = this.width * this.tabs.length dies.$nextTick(() => { let dom = dies.$refs.tabs // Sichtbarer Bereich < Scrollbereich (Scrollbereich kann nur verschoben werden, wenn er größer als der sichtbare Bereich ist) // Bewegungsdistanz + sichtbarer Bereich = Breite des Scrollbereichs (die letzte Breite, die tatsächliche Breite beim Klicken) < Scrollbereichif (dom.clientWidth < Gesamtbreite && this.moveX + dom.clientWidth < Gesamtbreite) { // this.moveX ist 0 minus der Breite des unbesetzten Raums this.moveX += this.moveX ? this.width : this.width - this.unoccupied dies.übersetzenX(dies.verschiebenX) } }) }, /** * Linker Versatz**/ vorherige() { wenn (diese.moveX > 0) { dies.moveX -= diese.width dies.übersetzenX(dies.verschiebenX) } }, /** * Beginnen Sie, Dom zu bewegen **/ übersetzeX(x) { dies.moveX = x < 0 ? 0 : x dies.$refs.tabs.children[0].style.transform = ``übersetzenX(-${this.moveX}px)`` } } } </Skript> <style lang="scss" scoped> .Hauptbox { Höhe: 500px; Breite: 500px; Polsterung: 10px 20px 20px 20px; .Hauptbox-Tab { Position: relativ; Polsterung: 10px 20px; Überlauf: versteckt; & > ich { Position: absolut; Cursor: Zeiger; unten: 15px; &:n-tes-Kind(1) { links: 0; } &:n-tes-Kind(2) { rechts: 0; } } .main-box-tab-content { Überlauf: versteckt; .main-box-tab-roll { Übergang: Transformation 0,5 s; Anzeige: Flex; Elemente ausrichten: zentrieren; div { Flex-Schrumpfen: 0; Cursor: Zeiger; Breite: 130px; Höhe: 25px; Rand: 0,5px; Anzeige: Flex; Elemente ausrichten: zentrieren; Inhalt ausrichten: Abstand dazwischen; Spanne, ich { Schriftgröße: 12px; } Spanne { Rand links: 10px; Überlauf: versteckt; Leerzeichen: Nowrap; Textüberlauf: Auslassungspunkte; } ich { Rand rechts: 10px; } } } } .tab-item { Farbe: #cccccc; Hintergrundfarbe: rgba(255, 255, 255, .5); Rahmenradius: 0 1px 0 1px; Rand: 1px durchgezogen #052141; } .tab-item-action { Farbe: #ffffff; Hintergrund: rgba (0, 180, 255, 0,8); Rahmenradius: 0 1px 0 1px; Rand: 1px durchgezogen #1E2088; } } .Hauptbox-Inhalt { Höhe: berechnet (100 % – 70 Pixel); Polsterung: 10px; Rand: 1px sattelbraun durchgezogen; Hintergrundgröße: 100 % 100 %; } } </Stil> Dies ist das Ende dieses Artikels über die Implementierung von Tab-Tags in Vue (Tabs überschreiten das automatische Scrollen). Weitere relevante Inhalte zu Vue-Tab-Tags finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Allgemeine Linux-Befehle chmod zum Ändern der Dateiberechtigungen 777 und 754
>>: MySQL Server IO 100 % Analyse- und Optimierungslösung
<br />Vorheriges Tutorial: Webdesign-Tutoria...
Die GROUP BY-Anweisung wird in Verbindung mit der...
Inhaltsverzeichnis 1. asynchron 2. warten: 3. Umf...
Software-Download Link zum Herunterladen der Soft...
Kapitel 1 Installation des Quellcodes Die Install...
Seitendomänenbeziehung: Die Hauptseite a.html gehö...
In diesem Artikel finden Sie das Installations- u...
Die Implementierung des Erweiterns und Reduzieren...
Der Ogg-Prozess einer vor einiger Zeit erstellten...
Die detaillierten Schritte zur Installation von m...
Hauptsächlich verwendete Wissenspunkte: •CSS3 3D-...
Problembeschreibung Die MySQL-Startfehlermeldung ...
MySQL-Version: MySQL Community Server 5.7.17, ins...
In diesem Artikel wird der spezifische Code von V...
Frage Der Code hat keine Eingabeaufforderung: Vie...