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

Detaillierte Fehlerbehebung bei Docker.service-Startfehlern

Führen Sie den folgenden Befehl aus, um einen Feh...

So überprüfen Sie, wo die Metadatensperre in MySQL blockiert ist

So überprüfen Sie, wo die Metadatensperre in MySQ...

So definieren Sie Datenbeispiele in Vue

Vorwort Im Entwicklungsprozess ist das Definieren...

Javascript Blob-Objekt zum Erzielen eines Dateidownloads

Inhaltsverzeichnis veranschaulichen 1. Blob-Objek...

Detaillierte Erklärung zur Verwendung der Vue-Nummernschild-Eingabekomponente

Eine einfache Nummernschild-Eingabekomponente (vu...

Grundlegendes Nutzungs-Tutorial zur IPTABLES-Firewall unter LINUX

Vorwort Für Produktions-VPS mit öffentlicher IP w...

Detailliertes Tutorial zum Erstellen eines privaten Git-Servers unter Linux

1. Server-Setup Das Remote-Repository unterscheid...

Seitenlayout für Bootstrap 3.0-Lernnotizen

Dieses Mal werden wir hauptsächlich etwas über da...

So verwenden Sie die Vue-Cache-Funktion

Inhaltsverzeichnis Cache-Funktion in vue2 Transfo...

Alibaba Cloud Ubuntu 16.04 baut IPSec-Dienst auf

Einführung in IPSec IPSec (Internet Protocol Secu...

So verwenden Sie CSS-Overflow: Hidden (Überlauf ausblenden und Floats löschen)

Überlauf ausblenden Damit ist gemeint, dass Text-...