UnsinnDemo-Vorschau Implementierte FunktionenEs gibt standardmäßig eine Homepage, die nicht geschlossen werden kann Klicken Sie auf das Routenmenü, um zu prüfen, ob es vorhanden ist. Wenn nicht, fügen Sie es hinzu. Wenn ja, suchen Sie es oben. Klicken Sie zum Springen, klicken Sie zum Schließen auf X Aktuelle Seite schließen und automatisch zur nächsten Tag-Seite springen Wenn die aktuelle Seite die letzte ist, springe standardmäßig zur vorherigen Tag-Seite Rechtsklick-Menü, Aktualisieren, Rechts schließen, Alle schließen Wenn die Tags zu lang sind, werden Schaltflächen auf der linken und rechten Seite angezeigt und verschwinden automatisch, wenn die Tags verkleinert werden. Bestimmen Sie dynamisch, ob das Fenster vergrößert oder verkleinert wird, und bestimmen Sie automatisch, ob sich auf der linken und rechten Seite Schaltflächen befinden TextKeine Notwendigkeit für Vuex, chaotische Methoden, alles in einer Datei, einfach einfügen und verwenden Legen Sie es einfach dort ab, wo Sie möchten (diese Demo wird in die Brotkrümelnavigation gelegt) Zuerst installieren (ein Paket, das die Größe eines DOM-Elements überwacht) npm installiere Element-Größenänderungsdetektor Tags.vue <Vorlage> <div> <div Klasse="Tags"> <!-- Pfeil nach links --> <div Klasse="Pfeil Pfeil_links" v-show="Pfeil sichtbar" @click="handleClickToLeft" > <i Klasse="el-icon-arrow-left"></i> </div> <!-- Tag-Inhalt --> <div Klasse = "tags_content" ref = "box"> <span ref="tags"> <el-tag v-for="(Tag, Index) in Tags" :Schlüssel="tag.name" :Klasse="[aktiv == Index ? 'aktive Top-Tags' : 'Top-Tags']" Effekt="dunkel" :closable="tag.name != 'ErsteSeite1'" @close="handleClose(index, tag)" @click="clickTag(index, tag)" @contextmenu.native.prevent="handleClickContextMenu(index, tag)" > {{ $t("router." + tag.name) }} </el-tag> </span> </div> <!-- Pfeil nach rechts --> <div Klasse="Pfeil Pfeil_rechts" v-show="Pfeil sichtbar" @click="Klick nach rechts handhaben" > <i Klasse="el-icon-arrow-right"></i> </div> </div> <!-- Rechtsklickmenü--> <ul v-show="Kontextmenü.istAnzeigen" :style="{ links: contextMenu.menuLeft, oben: '96px' }" Klasse = "el-Dropdown-Menü el-Popper" x-placement="unteres Ende" > <li v-if="dieses.aktive == dieses.Kontextmenü.index" Klasse="el-dropdown-menu__item" @click="aktualisieren" > Aktualisieren <li class="el-dropdown-menu__item" @click="closeRightTag"> Rechte Seite schließen</li> <li class="el-dropdown-menu__item" @click="closeOtherTag"> Andere schließen</li> <div x-arrow="" Klasse="popper__arrow" Stil="links: 44px;"></div> </ul> </div> </Vorlage> <Skript> importiere elementResizeDetectorMaker aus „element-resize-detector“; Standard exportieren { Daten() { zurückkehren { // Gibt es einen Pfeil arrowVisible: true, //Anzahl Klicks: 0, aktiv: 0, Stichworte: [], // Klicken Sie mit der rechten Maustaste auf das Element contextMenu: { Index: 0, Etikett: {}, Menü links: 0, isShow: false } }; }, betrachten: $route() { dies.getThisPage(); }, tags() { dies.listenFun(dies.$refs.tags, "tags"); } }, montiert() { dies.listenFun(diese.$refs.box, "box"); var das = dies; document.addEventListener("klicken", function(e) { that.contextMenu.isShow = false; }); }, Methoden: { // Überwachen Sie die Breite des sichtbaren Bereichs und führen Sie listenFun(monitor, dom) aus, wenn sich die Größe des Browserfensters ändert { lass boxWidth = this.$refs.box.offsetWidth, tagsWidth = this.$refs.tags.offsetWidth, erd = elementResizeDetectorMaker(); erd.listenTo(monitor, ele => { dies.$nextTick(() => { Wenn ( (dom == "box" und ele.offsetWidth >= tagsWidth) || (dom == "tags" und ele.offsetWidth <= boxWidth) ) { Dies.arrowVisible = false; dies.$refs.box.style.paddingLeft = "16px"; dies.$refs.box.style.paddingRight = "16px"; this.$refs.box.style.transform = "TranslateX(0px)"; diese.num = 0; } anders { Dies.arrowVisible = true; dies.$refs.box.style.paddingLeft = "56px"; dies.$refs.box.style.paddingRight = "56px"; } }); }); }, // Aktuelle Seite ermitteln getThisPage() { lass currentPgae = this.$route; // Bestimmen, ob die aktuelle Seite in den Tags vorhanden ist var index = this.tags.findIndex(tag => tag.name == currentPgae.name); wenn (Index == -1) { dies.tags.push({ Name: aktuellerSeite.name, Pfad: currentPgae.path }); } //Derzeit ausgewählte Seite this.active = this.tags.findIndex(tag => tag.name == currentPgae.name); }, // Tag schließen handleClose(index, tag) { dies.tags.splice(dies.tags.indexOf(tag), 1); wenn (index == diese.tags.länge) { dies.aktiv = Index - 1; dies.$router.push(dies.tags[index - 1].pfad); } anders { dies.$router.push(dies.tags[index].pfad); } }, // Klicken Sie auf das Tag clickTag(index, tag) { dies.aktiv = Index; dies.$router.push(tag.path); }, // Linke Taste handleClickToLeft() { wenn (diese.zahl > 0) { diese.nummer--; dies.$refs.box.style.transform = `TranslateX(-${this.num * 200}px)`; } }, // Rechte Taste handleClickToRight() { // Das letzte Tag wird von der linken Seite des Browsers aus gemessen let lastChild = document .querySelectorAll(".top_tags") [this.tags.length - 1].getBoundingClientRect().right; // Breite des sichtbaren Fensters let bodyWidth = document.body.offsetWidth; // Rechter Pfeil 48 + rechter Rand 16 wenn (BodyWidth - letztes Kind <= 64) { diese.num++; dies.$refs.box.style.transform = `TranslateX(-${this.num * 200}px)`; } }, // Rechtsklick handleClickContextMenu(index, tag) { this.contextMenu.isShow = true; dieses.Kontextmenü.index = Index; this.contextMenu.tag = Tag; let isTag = Dokument .querySelectorAll(".top_tags") [index].getBoundingClientRect(); this.contextMenu.menuLeft = isTag.left – 48 + isTag.width / 2 + "px"; }, // Aktualisieren refresh() { dies.$router.go(0); }, // Andere schließen closeOtherTag() { sei tagsLin = this.tags.length, { index, tag, menuLeft } = dieses.Kontextmenü; wenn (Index != 0) { diese.tags = [ { Name: "ErsteSeite1", Pfad: "/Erste/Seite1" }, { Name: tag.name, Pfad: tag.pfad } ]; } anders { diese.tags = [ { Name: "ErsteSeite1", Pfad: "/Erste/Seite1" } ]; } dies.aktiv = Index; dies.$router.push(tag.path); }, // Rechte Seite schließen closeRightTag() { sei tagsLin = this.tags.length, { index, tag, menuLeft } = dieses.Kontextmenü; dies.tags.splice(index + 1, tagsLin - index); dies.aktiv = Index; dies.$router.push(tag.path); } }, erstellt() { // Auf Seitenaktualisierung warten window.addEventListener("beforeunload", e => { localStorage.setItem( "tagInfo", JSON.stringify({ aktiv: dies.aktiv, Schlagworte: diese.tags }) ); }); let tagInfo = localStorage.getItem("tagInfo") ? JSON.parse(localStorage.getItem("tagInfo")) : { aktiv: 0, Schlagworte: [ { Name: "ErsteSeite1", Pfad: "/Erste/Seite1" } ] }; dies.aktiv = tagInfo.aktiv; dies.tags = tagInfo.tags; } }; </Skript> <style lang="less" scoped> /deep/.el-tag--dark { Rahmenfarbe: transparent; } /tief/.el-tag--dark .el-tag__close { Farbe: #86909c; Schriftgröße: 16px; } /deep/.el-tag--dark .el-tag__close:hover { Hintergrund: #e7eaf0; } .tags { Position: relativ; Überlauf: versteckt; .Pfeil { Breite: 48px; Textausrichtung: zentriert; Cursor: Zeiger; Hintergrund: #fff; Position: absolut; Z-Index: 1; &_links { links: 0; oben: 0; } &_Rechts { rechts: 0; oben: 0; } } &_Inhalt { Übergang: 0,3 s; Leerzeichen: Nowrap; // Polsterung: 0 16px; } .top_tags { Rand rechts: 8px; Cursor: Zeiger; Hintergrund: #fff; Schriftgröße: 12px; Schriftstärke: 400; Farbe: #1d2129; } .top_tags:schweben, .aktiv, .Pfeil:schweben { Hintergrund: #e7eaf0; } } </Stil> Wichtige PunkteWas muss geändert werden currentPgae.name ist der Name der Routing-Struktur. Überprüfen Sie, ob sie existiert. Wenn nicht, fügen Sie sie hinzu. Wenn ja, suchen Sie sie oben. Ändern Sie sie entsprechend dem Projekt Gehen Sie bei der Überwachung der Aktualisierung zu den lokalen Speichertags und den aktiven Tags der aktuellen Seite und ändern Sie Ftistpage1 in Ihre eigene Homepage Dies ist das Ende dieses Artikels über die Implementierung des Vue-Top-Tags-Browserverlaufs. Weitere relevante Inhalte zum Vue-Top-Tags-Browserverlauf 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:
|
<<: Beispiel für die Kompilierung von LNMP im Docker-Container
>>: CSS3-Implementierungscode für einfaches Karussellbildschneiden
Es gibt einige Tags in XHTML, die ähnliche Funkti...
In diesem Artikel wird hauptsächlich der Beispiel...
1. Vorbereitende Schritte (Windows 7 + MySQL-8.0....
Zunächst muss Ihr Container laufen Sie können die...
Seite: Basis: <Vorlage> <div Klasse=&quo...
Inhaltsverzeichnis MySQL Master-Slave-Replikation...
Probieren wir hier den Reverse-Proxy von Nginx au...
Die Lösung für das Problem, dass die PHP7.3-Versi...
Die wesentlichen Inhalte dieses Artikels sind wie...
Hallo zusammen, ich bin Tony, ein Lehrer, der nur...
Vorwort Dieser Artikel beschreibt eine allgemeine...
Die Position-Eigenschaft Die Positionseigenschaft...
Das Unternehmensprojekt wurde in Java entwickelt ...
Es gibt auch zwei Server: Vorbereitung: Legen Sie...