Implementierungsmethode für die Kapselung von Vue3-Navigationsleistenkomponenten

Implementierungsmethode für die Kapselung von Vue3-Navigationsleistenkomponenten

Kapseln Sie eine Navigationsleistenkomponente in Vue3 ein und erzielen Sie einen Deckeneffekt beim Scrollen der Bildlaufleiste.

Das Wirkungsdiagramm der Navigationsleistenkomponente:

Schematische Darstellung des Deckeneffekts nach dem Scrollen der Bildlaufleiste:

Spezifische Codeanzeige:

<Vorlage>
  <header class="app-header">
    <div Klasse="Container">
      <!-- Kopfzeilennavigationsbereich -->
      <HeaderNavCommon />
      <div Klasse="Suche">
        <i class="iconfont icon-search"></i>
        <input type="text" placeholder="Suche" />
      </div>
      <div Klasse="Warenkorb">
        <a href="#" Klasse="aktuell">
          <i class="iconfont icon-cart"></i>
          <em>2</em>
        </a>
      </div>
    </div>
  </header>
</Vorlage>
 
<Skript>
HeaderNavCommon aus '@/components/header-nav-common.vue' importieren
Standard exportieren {
  Name: "AppHeader",
  Komponenten:
    HeaderNavCommon
  }
}
</Skript>
 
<style scoped lang="weniger">
.app-header {
  Hintergrund: #fff;
  .container {
    Anzeige: Flex;
    Elemente ausrichten: zentrieren;
  }
  .navs {
    Breite: 820px;
    Anzeige: Flex;
    Inhalt ausrichten: Abstand herum;
    Polsterung links: 40px;
    li {
      Rand rechts: 40px;
      Breite: 38px;
      Textausrichtung: zentriert;
      A {
        Anzeige: Inline-Block;
        Schriftgröße: 16px;
        Zeilenhöhe: 32px;
        Höhe: 32px;
      }
      &:schweben {
        A {
          Farbe: @xtxColor;
          Rahmen unten: 1px durchgezogen @xtxColor;
        }
      }
    }
  }
  .suchen {
    Breite: 170px;
    Höhe: 32px;
    Position: relativ;
    Rahmen unten: 1px durchgezogen #e7e7e7;
    Zeilenhöhe: 32px;
    .icon-suche {
      Schriftgröße: 18px;
      Rand links: 5px;
    }
    Eingabe {
      Breite: 140px;
      Polsterung links: 5px;
      Farbe: #666;
    }
  }
  .Warenkorb {
    Breite: 50px;
    .aktuell {
      Höhe: 32px;
      Zeilenhöhe: 32px;
      Textausrichtung: zentriert;
      Position: relativ;
      Anzeige: Block;
      .icon-wagen {
        Schriftgröße: 22px;
      }
      em {
        Schriftstil: normal;
        Position: absolut;
        rechts: 0;
        oben: 0;
        Polsterung: 1px 6px;
        Zeilenhöhe: 1;
        Hintergrund: @helpColor;
        Farbe: #fff;
        Schriftgröße: 12px;
        Rahmenradius: 10px;
        Schriftfamilie: Arial;
      }
    }
  }
}
</Stil>

Der mittlere Menübereich ist in einer separaten Komponente gekapselt, um die Wiederverwendung von zwei Komponenten zu erreichen (HeaderNavCommon-Komponente).

<Vorlage>
  <ul Klasse="App-Header-Navigation">
    <li class="home"><RouterLink zu="/">Zuhause</RouterLink></li>
    <li><a href="#" >Köstliches Essen</a></li>
    <li><a href="#" >Küche</a></li>
    <li><a href="#" >Kunst</a></li>
    <li><a href="#" >Elektrogeräte</a></li>
    <li><a href="#" >Startseite</a></li>
    <li><a href="#" >Pflege</a></li>
    <li><a href="#" >Schwangerschaft und Säugling</a></li>
    <li><a href="#" >Kleidung</a></li>
    <li><a href="#" >Lebensmittel</a></li>
  </ul>
</Vorlage>
 
<Skript>
 Standard exportieren {
    Name: "AppHeaderNav"
   }
</Skript>
 
<Stil scoped lang='less'>
.app-header-nav {
    Breite: 820px;
    Anzeige: Flex;
    Polsterung links: 40px;
    Position: relativ;
    Z-Index: 998;
  li {
    Rand rechts: 40px;
    Breite: 38px;
    Textausrichtung: zentriert;
  A {
    Schriftgröße: 16px;
    Zeilenhöhe: 32px;
    Höhe: 32px;
    Anzeige: Inline-Block;
   }
  &:schweben {
    A {
    Farbe: @xtxColor;
    Rahmen unten: 1px durchgezogen @xtxColor;
        }
      }
  }
}
</Stil>

Komponenten zur Kapselung von Deckeneffekten

<Vorlage>
  <div class="app-header-sticky" :class="{ anzeigen: oben >= 78 }">
    <div Klasse="Container" v-if="oben >= 78">
      <!-- Mitte -->
      <HeaderNavCommon />
      <!-- Rechte Taste -->
      <div Klasse="rechts">
        <RouterLink to="/">Marke</RouterLink>
        <RouterLink to="/">Thema</RouterLink>
      </div>
    </div>
  </div>
</Vorlage>
 
<Skript>
HeaderNavCommon aus '@/components/header-nav-common.vue' importieren
// importiere { ref } von 'vue'
importiere { useWindowScroll } von '@vueuse/core'
Standard exportieren {
  Name: "AppHeaderSticky",
  Komponenten: { HeaderNavCommon },
  aufstellen() {
    // Seiten-Scrolldistanz // const top = ref(0)
    // fenster.onscroll = () => {
    // top.Wert = Dokument.documentElement.scrollTop
    // }
    // Seiten-Scrollen mit Drittanbieter-Paketen const { y: top } = useWindowScroll()
    zurück { nach oben }
  }
}
</Skript>
 
<style scoped lang="weniger">
.app-header-sticky {
  Breite: 100 %;
  Höhe: 80px;
  Position: fest;
  links: 0;
  oben: 0;
  Z-Index: 999;
  Hintergrundfarbe: #fff;
  Rahmen unten: 1px durchgezogen #e4e4e4;
  // Das ist der Schlüsselstil!!!
  // Bewegen Sie sich standardmäßig ganz nach oben transform: translateY(-100%);
  // Vollständig transparent Opazität: 0;
  //Angezeigter Klassenname&.show {
    Übergang: alle 0,3 s linear;
    transformieren: keine;
    Deckkraft: 1;
  }
  .container {
    Anzeige: Flex;
    Elemente ausrichten: zentrieren;
  }
  .Rechts {
    Breite: 220px;
    Anzeige: Flex;
    Textausrichtung: zentriert;
    Polsterung links: 40px;
    Rahmen links: 2px durchgezogen @xtxColor;
    A {
      Breite: 38px;
      Rand rechts: 40px;
      Schriftgröße: 16px;
      Zeilenhöhe: 1;
      &:schweben {
        Farbe: @xtxColor;
      }
    }
  }
}
</Stil>

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:
  • Vue3.x verwendet mitt.js für die Komponentenkommunikation
  • Schritte für Vue3 zur Verwendung von Mitt für die Komponentenkommunikation
  • Detaillierte Erläuterung der Vue3-Kapselungsfunktion für Nachrichtenaufforderungsinstanzen
  • Detaillierte Erläuterung der Verwendung des Synchronisierungsmodifikators bei der Parameterübertragung von übergeordneten und untergeordneten Komponenten in Vue3
  • Einführung in die reaktive Funktion toRef-Funktion ref-Funktion in Vue3
  • Vergleich der Vorteile von vue3 und vue2
  • Praktischer Bericht über die Entwicklung von Vue3- und TypeScript-Projekten
  • Zusammenfassung der Projektentwicklungspraxis in Kombination mit Vue3 von TypeScript
  • Schnellstart der Vue3-Dokumentation
  • Details zu 7 Arten der Komponentenkommunikation in Vue3

<<:  Implementierung von LNMP für die separate Bereitstellung von Docker-Containern

>>:  Lösung für den MySQL-Root-Passwortfehler Nummer 1045

Artikel empfehlen

mysql 8.0.18 mgr-Installation und seine Umschaltfunktion

1. Systeminstallationspaket yum -y install make g...

Beispiele für häufige Nginx-Fehlkonfigurationen

Inhaltsverzeichnis Fehlender Stammspeicherort Off...

Zusammenfassung der HOC-Nutzung von React-High-Order-Komponenten

Ein Satz zur Einführung von HOC Was ist eine Komp...

Grundlegende Hinweise zu HTML (empfohlen)

1. Grundstruktur der Webseite: XML/HTML-CodeInhal...

Beispielcode zur Implementierung eines 3D-Text-Hover-Effekts mit CSS3

In diesem Artikel wird der Beispielcode von CSS3 ...

So nummerieren Sie die Ergebnisse von MySQL-Abfragedaten automatisch

Vorwort Tatsächlich bin ich noch nie auf eine Sit...

So versetzen Sie JavaScript in den Ruhezustand oder in den Wartezustand

Inhaltsverzeichnis Überblick Überprüfen von setTi...

Eine kurze Diskussion darüber, ob CSS-Animationen durch JS blockiert werden

Der Animationsteil von CSS wird von JS blockiert,...

Detaillierte Erklärung zum Aktivieren des https-Dienstes in Apache unter Linux

Dieser Artikel beschreibt, wie man den https-Dien...

VUE+Canvas realisiert den gesamten Prozess eines einfachen Gobang-Spiels

Vorwort In Bezug auf das Layout ist Gobang viel e...

Installieren Sie Centos7 mithilfe einer virtuellen Hyper-V-Maschine

Inhaltsverzeichnis einführen Vorbereiten Systemab...

Implementierung des Wasserfall-Layouts im Uni-App-Projekt

GitHub-Adresse, Sie können es mit einem Stern mar...