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

Eine kurze Diskussion zum Implementierungsprinzip des Vue-Slots

Inhaltsverzeichnis 1. Beispielcode 2. Sehen Sie d...

Warum sollten MySQL-Felder NOT NULL verwenden?

Ich habe vor Kurzem in einer neuen Firma angefang...

Windows Server 2019 installieren (grafisches Tutorial)

Windows Server 2019 ist das neueste Server-Betrie...

Alibaba Cloud ESC Server Docker-Bereitstellung von Single Node Mysql

1. Laden Sie die beschleunigte Version von msyql ...

Vue3 + TypeScript-Entwicklungszusammenfassung

Inhaltsverzeichnis Vue3 + TypeScript lernen 1. Um...

SSH-Portweiterleitung zur Erzielung einer Intranet-Penetration

Die Maschinen in unserem LAN können auf das exter...

Detaillierte Analyse des binlog_format-Modus und der Konfiguration in MySQL

Es gibt drei Hauptmethoden der MySQL-Replikation:...

nuxt.js Konfiguration mehrerer Umgebungsvariablen

Inhaltsverzeichnis 1. Einleitung 2. Szenario 3. S...

CSS transparenter Rahmen Hintergrund-Clip-Magie

In diesem Artikel wird hauptsächlich die wunderba...

MySql legt die angegebenen Benutzerdatenbankansichtsabfrageberechtigungen fest

1. Neuen Benutzer anlegen: 1. Führen Sie eine SQL...

js canvas realisiert Bilder mit abgerundeten Ecken

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