In diesem Artikelbeispiel wird der spezifische Code von Vue zur Erzielung eines Wasserfallflusses mit unendlichem Laden als Referenz bereitgestellt. Der spezifische Inhalt ist wie folgt Der von mir erstellte Wasserfallfluss wird auf einer verschachtelten Seite platziert, die dem Hauptinhalt des Verwaltungshintergrunds ähnelt. Wenn Sie ihn auf Vollbild ändern möchten, ist dies auch sehr praktisch. Tatsächlich ist es einfacher, da einige Fallstricke bei der Verwendung von onScroll auf Elementen vermieden werden. Durch diesen Wasserfallfluss können Sie die folgenden Wissenspunkte meistern: 1. Das Abhören von Bildlaufereignissen auf Elementen ist etwas mühsamer, als das direkte Abhören am Fenster. Hier wird mockjs verwendet, um die Bilddaten zu simulieren, und dann werden die Bilddaten über axios aufgerufen. Es können auch andere Datenquellen verwendet werden. Bestimmen Sie durch Berechnen der Bildhöhe, in welche Spalte das Bild geladen werden soll. Fügen Sie den Code direkt ein. Wenn Sie Fragen haben, können Sie diese gerne diskutieren. <Vorlage> <div class="Wasserfall wf-wrap" ref="Wasserfall" @scroll="onScroll"> <ul> <transition-group name="list" tag="li"> <li v-for="(Element, Index) in Wasserfallliste" :Schlüssel="Index" Klasse="wf-item" :Stil="{oben:Element.oben+'px',links:Element.links+'px', Breite:Element.breite+'px', Höhe:Element.höhe + 'px'}" > <img :src="item.src" /> </li> </Übergangsgruppe> </ul> </div> </Vorlage> <Skript> importiere { getList } von "@/api/demo"; Standard exportieren { Name: "Wasserfall", Daten() { zurückkehren { WasserfallListe: [], WasserfallCol: 5, Spaltenbreite: 236, Rand rechts: 10, Rand unten: 10, Spaltenhöhen: [], Listenabfrage: { Seite: 1, Grenze: 5, Sortieren: "+id" }, wird geladen: falsch, zeigen: wahr }; }, montiert() { dies.init(); }, Methoden: { init() { // Bei der Initialisierung beträgt die Höhe jeder Spalte 0 this.colHeights = neues Array(this.waterfallCol); für (lass i = 0; i < this.colHeights.length; i++) { this.colHeights[i] = 0; } this.colWidth = (this.$refs.waterfall.clientWidth - (diese.WasserfallCol - 1) * diese.MarginRight) / dieser.WasserfallCol; dies.loadImgs(); }, ladeImgs() { dies.laden = wahr; // Daten von der API abrufen getList(this.listQuery).then(res => { lass Bilder = res.data.items; lass promiseAll = [], Bilder = [], Gesamt = Bilder.Länge; für (sei i = 0; i < gesamt; i++) { promiseAll[i] = neues Versprechen(resolve => { imgs[i] = neues Bild(); imgs[i].src = Bilder[i].Bild_uri; imgs[i].onload = () => { lass imgData = {}; imgData.height = (imgs[i].height * this.colWidth) / imgs[i].width; imgData.width = diese.colWidth; imgData.src = Bilder[i].image_uri; dies.waterfallList.push(imgData); dies.rankImgs(imgData); auflösen (Bilder[i]); }; }); } Versprechen.alles(versprechenAlles).dann(() => { dies.laden = falsch; dies.loadMore(); }); }); }, ladeMehr() { Wenn ( dies.$refs.waterfall.clientHeight + dies.$refs.waterfall.scrollTop > dies.filterMin().minHeight && dies.wird geladen == false ) { dies.laden = wahr; setzeTimeout(() => { dies.loadImgs(); }, 200); } }, rankImgs(imgData) { lass min = this.filterMin(); imgData.top = min.minHeight; imgData.left = min.minIndex * (this.colWidth + this.marginRight); this.colHeights[min.minIndex] += imgData.height + this.marginBottom; }, filterMin() { let minHeight = Math.min.apply(null, this.colHeights); zurückkehren { minHöhe: minHöhe, minIndex: this.colHeights.indexOf(minHeight) }; }, beimScrollen() { dies.loadMore(); } } }; </Skript> <style lang="scss" scoped> ul li { Listenstil: keiner; } .wf-wrap { Position: relativ; Breite: 100 %; Höhe: 100%; Überlauf: scrollen; } .wf-Artikel { Position: absolut; } .wf-item img { Breite: 100 %; Höhe: 100%; } .list-enter-active, .Liste-leave-active { Übergang: alles 1en; } .list-enter, .list-leave-to /* .list-leave-active für Versionen unter 2.1.8 */ { Deckkraft: 0; transformieren: übersetzenY(30px); } </Stil> 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:
|
<<: Nicht standardmäßiger Implementierungscode für die MySQL UPDATE-Anweisung
>>: Markup-Validierung für Doctype
React-Native-Installationsprozess 1.npx react-nat...
Inhaltsverzeichnis animate()-Animationsmethode An...
Windows Server 2012 und Windows Server 2008 unter...
1. Schauen Sie sich zunächst die Anforderungskonf...
Inhaltsverzeichnis Schmutzige Seiten (Speichersei...
Flash-Dateiformate: .FLV und .SWF Für das Flash-Vi...
MySQL selbst wurde auf Basis des Dateisystems ent...
Die Diversifizierung von Website-Layouts ist unse...
Wenn Sie das langsame Problem ein für alle Mal lö...
Vorwort: Für die Implementierung digitaler Additi...
Online-Vorschau https://jsrun.pro/AafKp/ Erster B...
Inhaltsverzeichnis 1. Warum NanoID UUID ersetzt 2...
Hintergrund Zunächst möchte ich sagen, dass ich k...
Als eines der beliebtesten Front-End-Frameworks i...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...