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

Zusammenfassung der Vue Watch-Überwachungsmethoden

Inhaltsverzeichnis 1. Die Rolle der Uhr in Vue is...

Detaillierte Anweisungen zur Installation von Jenkins auf Ubuntu 16.04

1. Voraussetzungen JDK wurde installiert echo $PA...

Detaillierte Erläuterung des Vue-Router-Routings

Inhaltsverzeichnis 1. Grundlegende Verwendung 2. ...

js, um einen einfachen Karusselleffekt zu erzielen

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

...

CSS-Lösung zum Zentrieren von Elementen mit variabler Breite und Höhe

1. Horizontale Mitte Öffentlicher Code: html: <...

MySQL-Abfrageanweisung nach Zeit gruppiert

MySQL-Abfrage nach Jahr, Monat, Woche, Tagesgrupp...

Wartungsmethode für den Innodb-Systemtabellenbereich

Umweltbeschreibung: Es gibt eine laufende MySQL-U...

MariaDB-Remote-Login-Konfiguration und Problemlösung

Vorwort: Der Installationsvorgang wird nicht im D...

Implementierung der HTML-Befehlszeilenschnittstelle

HTML-Teil Code kopieren Der Code lautet wie folgt:...