Vue implementiert Ankerpositionierungsfunktion

Vue implementiert Ankerpositionierungsfunktion

In diesem Artikelbeispiel wird der spezifische Code von Vue zur Implementierung der Ankerpositionierung zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt

Hier implementieren wir hauptsächlich eine einfache, durch Scrollen ausgelöste Ankerpunkthervorhebung und klicken auf den Ankerpunkt, um die Scrollfunktion auszulösen. Wenn Sie die Scrollhöhe des Browsers abrufen möchten, ist jeder Browser anders. Verwenden Sie die folgenden Methoden:

Chrome: document.body.scrollTop
Firefox: document.documentElement.scrollTop
Safari: window.pageYOffset

Ich scrolle hier ein lokales Element, also ist es etwas anders. Fügen Sie zuerst die HTML- und CSS-Codeblöcke an:

„scroll-content“ ist der Bildlaufbereich und „operation-btn“ ist die Schaltfläche, die das Verhalten des Ankerpunkts steuert.

<Vorlage>
  <div Klasse="Ankerpunkt">
    <!-- Scrollbereich -->
    <div Klasse="Scroll-Inhalt" @scroll="beimScroll">
      <div class="scroll-item" style="height: 500px;background: #3a8ee6;">Eine Ebene</div>
      <div class="scroll-item" style="height: 500px;background: red;">Zweiter Stock</div>
      <div class="scroll-item" style="height: 500px;background: #42b983">Drei Ebenen</div>
      <div class="scroll-item" style="height: 1000px;background: yellow;">Vier Ebenen</div>
    </div>
    <!-- Schaltfläche -->
    <div Klasse="operation-btn">
      <div v-for="(item, index) in ['Erster Stock','Zweiter Stock','Dritter Stock','Vierter Stock']" :key="index" @click="jump(index)"
           :style="{Hintergrund: activeStep === index ? '#eeeeee' : '#ffffff'}">{{Element}}
      </div>
    </div>
  </div>
</Vorlage>

<style lang="scss" scoped>
  .Ankerpunkt {
    Flex-Basis: 100%;
    Anzeige: Flex;
    Überlauf: versteckt;
    .scroll-Inhalt {
      Höhe: 100%;
      Breite: 90%;
      Überlauf: scrollen;
    }
    .operation-btn {
      Breite: 10%;
      Höhe: 100%;
    }
  }
</Stil>

Markieren Sie durch Abhören von Scroll-Ereignissen die Ankerschaltfläche

Hier wird durch Durchlaufen der Bildlaufelemente ermittelt, ob die Bildlaufdistanz der Bildlaufleiste größer ist als die scrollbare Distanz des aktuellen Elements (d. h. die Distanz von der Oberseite seines OffsetParent, das hier der Hauptteil ist).

//Hervorhebung der Scroll-Trigger-Schaltfläche onScroll (e) {
  let scrollItems = document.querySelectorAll('.scroll-item')
  für (let i = scrollItems.length - 1; i >= 0; i--) {
    //Beurteilen, ob die Scroll-Distanz der Bildlaufleiste größer ist als die scrollbare Distanz des aktuellen Scroll-Elements let judge = e.target.scrollTop >= scrollItems[i].offsetTop - scrollItems[0].offsetTop
    wenn (Richter) {
      dieser.activeStep = i
      brechen
    }
  }
},

Fügen Sie ein Klickereignis hinzu, scrollen Sie entsprechend dem Ankerpunkt zum entsprechenden Bereich und erzielen Sie ein reibungsloses Scrollen

Hier beziehen wir uns auf die Methode im Internet, unterteilen die Bildlaufdistanz in mehrere kleine Segmente und berücksichtigen das Auf- und Abwärtsscrollen , um die Bildlaufübergangsanimation zu erzielen.
Ursprünglich hatte ich geplant, scrollIntoView zum Implementieren von Bildlaufanimationen zu verwenden. scrollIntoView wird von verschiedenen Browsern gut unterstützt, aber ScrollIntoViewOptions weist immer noch Probleme mit der Browserkompatibilität auf. Daher habe ich stattdessen die folgende Distanzdivisionsmethode verwendet.

// Klicken, um den Ankerpunkt zu wechseln. Sprung (Index) {
 let Ziel = Dokument.querySelector('.scroll-content')
 let scrollItems = document.querySelectorAll('.scroll-item')
 // Bestimmen Sie, ob die Bildlaufleiste nach unten gescrollt ist, wenn (target.scrollHeight <= target.scrollTop + target.clientHeight) {
   dieser.activeStep = Index
 }
 let total = scrollItems[index].offsetTop - scrollItems[0].offsetTop // Der Abstand zwischen dem Ankerelement und der Oberseite seines offsetParent (hier ist der Hauptteil) (die zu scrollende Distanz)
 let distance = document.querySelector('.scroll-content').scrollTop // Der Abstand zwischen der Bildlaufleiste und der Oberseite des Bildlaufbereichs // let distance = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset // Der Abstand zwischen der Bildlaufleiste und der Oberseite des Bildlaufbereichs (der Bildlaufbereich ist das Fenster)
 // Implementierung der Scroll-Animation. Verwenden Sie die setTimeout-Rekursion, um ein reibungsloses Scrollen zu erreichen. Unterteilen Sie die Distanz in 50 kleine Segmente und scrollen Sie alle 10 ms. // Berechnen Sie die Distanz jedes kleinen Segments. let step = total / 50
 if (Gesamt > Entfernung) {
   smoothDown(Dokument.Abfrageselektor('.scroll-content'))
 } anders {
   let newTotal = Entfernung - Gesamt
   Schritt = newTotal / 50
   smoothUp(Dokument.Abfrageselektor('.scroll-content'))
 }

 // Parameter Element ist der Scrollbereich Funktion smoothDown (Element) {
   wenn (Entfernung < Gesamt) {
     Distanz += Schritt
     element.scrollTop = Abstand
     setTimeout(smoothDown.bind(dieses, Element), 10)
   } anders {
     element.scrollTop = insgesamt
   }
 }

 // Parameter Element ist der Scrollbereich Funktion smoothUp (Element) {
   if (Entfernung > Gesamt) {
     Abstand -= Schritt
     element.scrollTop = Abstand
     setTimeout(smoothUp.bind(dieses, Element), 10)
   } anders {
     element.scrollTop = insgesamt
   }
 }

 // document.querySelectorAll('.scroll-item').forEach((item, index1) => {
 // wenn (index === index1) {
 // Artikel.scrollIntoView({
 // Block: "Start",
 // Verhalten: ‚glatt‘
 // })
 // }
 // })
}

Hier ist das Wirkungsdiagramm:

Dies ist das erste Mal, dass ich die Effekte der Ankerpunktpositionierung und des Scrollens von Ankerpunkten als Hervorhebung implementiert habe. Es gibt einige Mängel. Bitte korrigieren Sie mich, wenn Sie Fragen oder Vorschläge haben.
Ich bin sehr dankbar für die Inspiration, die dieser Artikel mit sich brachte, und habe neue Erkenntnisse gewonnen.

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:
  • Beispielcode für Vue-Schiebedecke und Ankerpositionierung
  • Vue hört auf das Scrollen, um eine Ankerpositionierung zu erreichen (bidirektional) Beispiel
  • Alternative Methode zur Ankerpositionierung im Vue-Projekt
  • Detaillierte Erklärung der Ankerpositionierung im Vue-Projekt
  • Vue + Element UI realisiert Ankerpositionierung

<<:  Mehrere Szenarien für die Verwendung des Nginx Rewrite-Moduls

>>:  MySql-Lerntag 03: Verbindungs- und Abfragedetails zwischen Datentabellen

Artikel empfehlen

Grundlegende Ideen und Codes zur Implementierung von Videoplayern in Browsern

Inhaltsverzeichnis Vorwort Zusammenfassung der Au...

So implementieren Sie Web-Stresstests mit Apache Bench

1. Einführung in Apache Bench ApacheBench ist ein...

So rufen Sie das unterbrochene System in Linux auf

Vorwort Langsame Systemaufrufe beziehen sich auf ...

So erstellen Sie einen MySQL-Cluster mit hoher Verfügbarkeit und Leistung

Inhaltsverzeichnis Was ist MySQL NDB Cluster? Vor...

Docker stellt nginx bereit und mountet Ordner und Dateioperationen

Während dieser Zeit habe ich Docker studiert und ...

Lösung für das Problem, dass das Vue-Seitenbild nicht angezeigt wird

Als ich eine neue Version der Konfigurationsschni...

Implementierung des Nginx-Proxy-Ports 80 bis Port 443

Die Konfigurationsdatei nginx.conf lautet wie fol...

Detaillierte Erklärung, wie Vue-Komponenten Werte untereinander übertragen

Inhaltsverzeichnis Überblick 1. Die übergeordnete...

Tipps zur Optimierung von MySQL SQL-Anweisungen

Wenn wir mit einer SQL-Anweisung konfrontiert wer...

Wir zeigen Ihnen einen Trick, um einen Textvergleich unter Linux durchzuführen

Vorwort Während des Schreibens des Codes werden w...

MySQL-Datenbank-Grundlagen SQL-Fensterfunktion Beispielanalyse-Tutorial

Inhaltsverzeichnis Einführung Einführung Aggregat...