Verwenden der Better-Scroll-Komponente in Vue zum Realisieren der horizontalen Scrollfunktion

Verwenden der Better-Scroll-Komponente in Vue zum Realisieren der horizontalen Scrollfunktion

Um

Als ich kürzlich Vue lernte, schrieb ich ein kleines Projekt, das die mobile Version von Qunar.com imitierte, um grundlegende Kenntnisse zu üben und zu festigen. Heute stellte ich jedoch fest, dass es auf der Homepage von Qunar eine Komponente gibt, die eine schlechte Benutzererfahrung bietet. Das heißt, eine horizontale Liste wird mithilfe des nativen Scrollens des Browsers implementiert. Das Scrollen der Liste ist ziemlich umständlich und unbequem, daher habe ich beschlossen, diese Komponente mit „Better-Scroll“ neu zu schreiben.

Einführung in Better-Scroll

Better-scroll ist eine auf i-scroll basierende Scrolling-Komponente, die von Huang Yi (ja, meinem Vorgesetzten) geschrieben wurde. Projektadresse: https://github.com/ustbhuangyi/better-scroll

1. Implementierungsprinzip des Scrollens

Das Scroll-Prinzip von Better-Scroll ist das gleiche wie das native Scroll-Prinzip des Browsers. Wenn die Höhe des untergeordneten Felds größer als die Höhe des übergeordneten Felds ist, erfolgt vertikales Scrollen:

Wenn die Breite der untergeordneten Box größer ist als die Breite der übergeordneten Box, erfolgt analog dazu ein horizontaler Bildlauf (das Grundprinzip).

2. Better-Scroll in Vue verwenden

Das Wichtigste, was Sie bei der Verwendung von Better-Scroll in Vue beachten müssen, ist, dass Sie warten müssen, bis das Rendern der Seite abgeschlossen ist, bevor Sie die Instanziierung von BScroll ausführen, da Better-Scroll die Größe des Bildlaufbereichs und die Größe des übergeordneten Felds ermitteln muss, um zu berechnen, ob gescrollt werden kann. Daher müssen wir ein gewisses Verständnis des Lebenszyklus von Vue haben.

Hier ist eine kleine Demo. Durch diese Demo lernen Sie, wie Sie better-scroll verwenden

<Vorlage>
  <div class="wrapper" ref="wrapper"> // Der einfachste Weg, DOM-Elemente in Vue zu erhalten, ist die Verwendung von this.$refs
    <ul Klasse="Inhalt">
      <li>...</li>
      <li>...</li>
      ...
    </ul>
  </div>
</Vorlage>
<Skript>
  importiere BScroll von 'better-scroll' //Importiere better-scroll
  Standard exportieren {
    montiert() {
      this.$nextTick(() => { // Verwenden Sie this.$nextTick, um sicherzustellen, dass die Komponente gerendert wurde this.scroll = new Bscroll(this.$refs.wrapper, {}) // BScroll instanziieren und zwei Parameter akzeptieren, der erste ist der Dom-Knoten der übergeordneten Box})
    }
  }
</Skript>

3. Implementierung des horizontalen Scrollens in Vue

1. Vergleich der Renderings

Natives Scrollen verwenden:

Verwenden Sie Better-Scroll:

2. Code (siehe Kommentare)

<Vorlage>
  <div Klasse="Befehls-Wrap">
    <div Klasse="Titel">
      <img class="title-img" src="https://imgs.qunarzz.com/piao/fusion/1711/16/bfbb9874e8f11402.png" alt="Die Hotlist dieser Woche">
      <span class="title-hotrec">Die Hotlist dieser Woche</span>
      <span class="title-allrec">Alle Diagramme</span>
    </div>
    <div ref="wrapper"> /* Dies ist die übergeordnete Box */
      <ul class="cont" ref="cont"> /* Dies ist die untergeordnete Box, der Scrollbereich*/
        <li Klasse="cont-item" v-for="Element der Empfehlungsliste" :key="item.id">
          <div Klasse="cont-img">
            <img class="img" :src="item.url" :alt="item.text">
          </div>
          <div class="cont-dest">{{item.text}}</div>
          <div Klasse="cont-price">
            <span class="Preis">¥{{Artikel.Preis}}</span>
            <span>Start</span>
          </div>
        </li>
      </ul>
    </div>
  </div>
</Vorlage>

<Skript>
BScroll von „better-scroll“ importieren

Standard exportieren {
  Name: 'HomeRecommand',
  Requisiten: {
    Empfehlungsliste: {
      Typ: Array,
      erforderlich: true
    }
  },
  Komponenten:

  },
  Daten () {
    zurückkehren {

    }
  },
  Methoden: {
    verScroll () {
      let width = this.recommendList.length * 110 // Berechnen Sie dynamisch die Größe des Scrollbereichs. Wie bereits erwähnt, liegt der Grund für das Scrollen darin, dass die Breite des Scrollbereichs größer ist als die Breite des übergeordneten Felds this.$refs.cont.style.width = width + 'px' // Ändern Sie die Breite des Scrollbereichs this.$nextTick(() => {
        wenn (!dieses.scroll) {
          this.scroll = neues BScroll(this.$refs.wrapper, {
            startX: 0, // Weitere Informationen zur Konfiguration finden Sie in der offiziellen Dokumentation von better-scroll. Ich werde hier nicht näher darauf eingehen. click: true,
            scrollX: wahr,
            scrollY: falsch,
            eventPassthrough: "vertikal"
          })
        } anders {
          this.scroll.refresh() //Rufen Sie diese Methode auf, wenn sich die DOM-Struktur ändert}
      })
    }
  },
  montiert () {
    dies.$nextTick(() => {
      let timer = setTimeout(() => { // Eigentlich möchte ich diesen Timer auch nicht schreiben, was dem Verschachteln einer weiteren Ebene von $nextTick entspricht, aber es wird fehlschlagen, wenn (timer) {
          Zeitüberschreitung löschen(Timer)
          dies.verScroll()
        }
      }, 0)
    })
  }
}
</Skript>

<style lang="scss" scoped>
  .Befehls-Wrap {
    Höhe: 0;
    Polsterung unten: 50 %;
    Rand oben: .2rem;
    Hintergrund: #fff;
    Polsterung links: .24rem;
    Breite: 100 %;
    .Titel {
      Position: relativ;
      Höhe: 40px;
      Anzeige: Flex;
      Polsterung: 12px 0;
      Box-Größe: Rahmenbox;
      .Titel-Bild {
        Breite: 15px;
        Höhe: 15px;
      }
      .title-hotrec {
        Schriftgröße: 16px;
        Rand links: 4px;
      }
      .title-allrec {
        Position: absolut;
        Polsterung oben: 2px;
        Schriftgröße: 13px;
        rechts: 20px;
        Farbe: grau;
      }
    }
    .forts. {
      Listenstil: keiner;
      // Überlauf-x: scrollen;  
      Leerzeichen: Nowrap;
      Schriftgröße: 12px;
      Textausrichtung: zentriert;
      Polsterung rechts: .24rem;
      .cont-Element {
        Position: relativ;
        Anzeige: Inline-Block;
        Polsterung: .06rem 0 .2rem;
        Breite: 2rem;
        Rand: 0,1rem;
        .cont-img {
          Überlauf: versteckt;
          Breite: 2rem;
          Höhe: 0;
          Polsterung unten: 100 %;
          .img {
            Breite: 100 %;
          }
        }
        .cont-dest {
          Rand: .1rem 0;
        }
        .cont-Preis {
          .Preis {
            Farbe: #ff8300;
          }
        }
      }
    }
  }
</Stil>

Referenzlinks

Autor: Huang Yi

Verknüpfung: https://zhuanlan.zhihu.com/p/27407024

Zusammenfassen

Damit ist dieser Artikel über die Verwendung der Better-Scroll-Komponente in Vue zur Implementierung von horizontalem Scrollen abgeschlossen. Weitere relevante Inhalte zu Vue Better-Scroll für horizontales Scrollen 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:
  • Vue implementiert horizontales Scrollen von Text im Laufschriftstil
  • Vue verwendet Better-Scroll, um ein Beispiel für eine horizontale Scroll-Methode zu erreichen
  • Vue ersetzt das Marquee-Tag, um horizontal zu scrollen, wenn der Text die Breite überschreitet
  • Das Problem und die Lösung, dass setInterval nicht gelöscht wird, wenn Nachrichten in Vue horizontal gescrollt werden
  • Vue.js+cube-ui (Scroll-Komponente) realisiert eine horizontal scrollende Navigationsleiste ähnlich dem Überschrifteneffekt
  • Vue-Beispielcode zum Erzielen des Auf- und Ab-Scrollens von Bulletintafeltext
  • Vue überwacht Scroll-Ereignisse, um eine Scroll-Überwachung zu implementieren
  • Vue.js-Praxis: Implementieren dynamischer Ankerpunkte durch Abhören von Scroll-Ereignissen
  • Beispielcode für Vue zum Erzielen eines nahtlosen Scrolleffekts von Nachrichten
  • Vue realisiert horizontalen Bildschirm-Scrolling-Ankündigungseffekt

<<:  Detailliertes Tutorial zum Kompilieren und Installieren von MySQL 5.7.24 auf CentOS7

>>:  So installieren Sie Nginx unter Win10

Artikel empfehlen

Über gutes Design

<br />Auf zehntausend Personen, die die Frag...

JavaScript-Ereigniserfassungs-Blubbern und Erfassungsdetails

Inhaltsverzeichnis 1. Ereignisablauf 1. Konzept 2...

Eine detaillierte Einführung in die Linux-Verzeichnisstruktur

Wenn Sie mit dem Erlernen von Linux beginnen, müs...

Konvertieren von XHTML-CSS-Seiten in Druckerseiten

<br />In der Vergangenheit musste zum Erstel...

So erstellen Sie LVM für das XFS-Dateisystem in Ubuntu

Vorwort Die logische Datenträgerverwaltung von lv...

jQuery implementiert einen einfachen Kommentarbereich

In diesem Artikel wird der spezifische Code von j...

Vollständige Schritte zum Erstellen eines Passwortgenerators mit Node.js

Inhaltsverzeichnis 1. Vorbereitung 2. Befehlszeil...

MySql-Anmeldekennwort vergessen und Lösung für vergessenes Kennwort

Methode 1: MySQL bietet einen Befehlszeilenparame...

Vorgehensweise, wenn die Online-MySQL-Auto-Increment-ID erschöpft ist

Inhaltsverzeichnis Tabellendefinition - automatis...

Zusammenfassung der Tipps zum Erstellen von Webseiten

Vorwort Dieser Artikel fasst hauptsächlich einige...