Vue3.0 handgeschriebener Karusselleffekt

Vue3.0 handgeschriebener Karusselleffekt

In diesem Artikel wird der spezifische Code des handgeschriebenen Karusselleffekts von Vue3.0 zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

Lasst uns beginnen

HTML-Struktur

<Vorlage>
  <div Klasse="xtx-Karussell" @mouseleave="enterFn" @mouseenter="leaveFn">
    <ul Klasse="Karussell-Body">
      <li Klasse="Karussell-Element" :Klasse="{ fade: indexid === index }" v-for="(Element, Index) in Liste" :Schlüssel="Element.id">
        <RouterLink zu="/">
          <img :src="item.imgUrl" alt="" />
        </RouterLink>
      </li>
    </ul>
    <a href="javascript:;" Klasse="carousel-btn prev" @click="lastPage"><i Klasse="iconfont icon-angle-left"></i></a>
    <a href="javascript:;" Klasse="Karussell-btn weiter" @click="nextPage"><i Klasse="iconfont icon-angle-right"></i></a>
    <div Klasse="Karussell-Anzeige">
      <span @click="indexid = i - 1" v-for="i in Liste.Länge" :key="i" :class="{ aktiv: indexid === i - 1 }"></span>
    </div>
  </div>
</Vorlage>

js-Syntax

<Skript>
importiere { ref, watch, onUnmount } von 'vue'
Standard exportieren {
  Name: 'Karussell',
  Requisiten: {
    // Bilddatenliste: {
      Typ: Objekt,
      Standard: () => {}
    },
    // Dauer jedes Schaltvorgangs des Karussells: {
      Typ: Nummer,
      Standard: 2
    },
    // Ob die automatische Wiedergabe des Karussells aktiviert werden soll: {
      Typ: Boolean,
      Standard: true
    },
    // Klicken, um mehrere Seiten umzublättern: {
      Typ: Nummer,
      Standard: 1
    }
  },
  setup(Requisiten) {
    // Index const indexid = ref(0)
    // Karussell const timer = ref(null)
    const TimeFn = () => {
      Intervall löschen(Timer)
      // Lösche den vorherigen Timer vor jeder Ausführung timer.value = setInterval(() => {
        indexid.wert++
        // Wenn der Grenzwert überschritten wird, neu auffüllen, wenn (indexid.value > props.list.length - 1) {
          indexid.value = 0
        }
      }, Eigenschaften.Dauer * 1000)
    }
    // Klick + nächstes Stoppbild const nextPage = () => {
      indexid.value += props.page
      wenn (indexid.value > props.list.length - 1) {
        indexid.value = 0
      }
    }
    // Klick + vorheriges Bild const lastPage = () => {
      indexid.value -= Eigenschaften.Seite
      wenn (indexid.value < 0) {
        indexid.value = props.list.length - 1
      }
    }
    // Timer löschen const leaveFn = () => {
      // console.log('Timer löschen')
      Intervall löschen(Timer.Wert)
      // konsole.log(Zeitgeber)
    }
    // Komponentenverbrauch, Bereinigungstimer onUnmounted(() => {
      Intervall löschen(Timer.Wert)
    })
    //Starte den Zeitgeber const enterFn = () => {
      wenn (props.list.length > 1 und props.autoplay) {
        // console.log('Timer starten')
        ZeitFn()
      }
    }
    betrachten(
      () => Eigenschaftenliste,
      () => {
        wenn (props.list.length > 1 und props.autoplay) {
          ZeitFn()
        }
      }
    )
    return { indexid, leaveFn, enterFn, nächsteSeite, letzteSeite }
  }
}
</Skript>

CSS-Stile

<style scoped lang="weniger">
.xtx-Karussell {
  Breite: 100 %;
  Höhe: 100%;
  Mindestbreite: 300px;
  Mindesthöhe: 150px;
  Position: relativ;
  .Karussell {
    &-Körper {
      Breite: 100 %;
      Höhe: 100%;
    }
    &-Artikel {
      Breite: 100 %;
      Höhe: 100%;
      Position: absolut;
      links: 0;
      oben: 0;
      Deckkraft: 0;
      Übergang: Deckkraft 0,5 s linear;
      &.verblassen {
        Deckkraft: 1;
        Z-Index: 1;
      }
      img {
        Breite: 100 %;
        Höhe: 100%;
      }
    }
    &-Indikator {
      Position: absolut;
      links: 0;
      unten: 20px;
      Z-Index: 2;
      Breite: 100 %;
      Textausrichtung: zentriert;
      Spanne {
        Anzeige: Inline-Block;
        Breite: 12px;
        Höhe: 12px;
        Hintergrund: rgba(0, 0, 0, 0,2);
        Randradius: 50 %;
        Cursor: Zeiger;
        ~ Spanne {
          Rand links: 12px;
        }
        &.aktiv {
          Hintergrund: #fff;
        }
      }
    }
    &-btn {
      Breite: 44px;
      Höhe: 44px;
      Hintergrund: rgba(0, 0, 0, 0,2);
      Farbe: #fff;
      Randradius: 50 %;
      Position: absolut;
      oben: 228px;
      Z-Index: 2;
      Textausrichtung: zentriert;
      Zeilenhöhe: 44px;
      Deckkraft: 0;
      Übergang: alle 0,5 s;
      &.vorherige {
        links: 20px;
      }
      &.nächste {
        rechts: 20px;
      }
    }
  }
  &:schweben {
    .Karussell-btn {
      Deckkraft: 1;
    }
  }
}
</Stil>

Als globales Plugin registrieren

Karussell aus „../carousel.vue“ importieren
// Vue2.0-Plugin schreibt Elemente: ein Objekt exportieren, über eine Installationsfunktion verfügen, standardmäßig einen Vue-Konstruktor übergeben, Vue basierend auf erweitern // Vue3.0-Plugin schreibt Elemente: ein Objekt exportieren, über eine Installationsfunktion verfügen, standardmäßig eine App-Anwendungsinstanz übergeben, App basierend auf Exportstandard erweitern {
  installieren(App) {
    // Erweitern Sie die App, die App bietet eine Komponentendirektivfunktion // Wenn Sie den Prototypen mit der Methode app.config.globalProperties mounten möchten, app.component(Carousel.name, xtxCarousel)
  }
}

In der Eintragsdatei main.js einbinden

importiere { createApp } von 'vue'
App aus „./App.vue“ importieren
Router aus „./router“ importieren
Store aus „./store“ importieren
importiere libraryUI von '@/components/library/index' // eigenes Plugin createApp(App)
  .use(speichern)
  .use(Router)
  .use(libraryUI) // Das Plugin einbinden.mount('#app')

Wie verwende ich das Plugin?

<Karussell :list="Liste" Dauer="1" />

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:
  • So kapseln Sie die Karussellkomponente in Vue3
  • Vue+Rem benutzerdefinierter Karusselleffekt
  • Beispielcode der Uniapp Vue- und NVUE-Karussellkomponenten

<<:  Lösung für den Fehler beim Aufrufen des Containers aufgrund vollen Docker-Speicherplatzes

>>:  Tipps zum Hinzufügen eines Favicons zu einer Website: ein kleines Symbol vor der URL

Artikel empfehlen

Erfahren Sie, wie Sie den JVM-Speicher von Tomcat über JConsoler überwachen

Inhaltsverzeichnis 1. So überwachen Sie Tomcat 2....

Einführung in die Cloud-native-Technologie Kubernetes (K8S)

Inhaltsverzeichnis 01 Was ist Kubernetes? 02 Der ...

Analyse und Lösung zur Leistungsoptimierung von Vue.js-Anwendungen

Inhaltsverzeichnis 1. Einleitung 2. Warum brauche...

Drei JavaScript-Methoden zur Lösung des Joseph-Ring-Problems

Inhaltsverzeichnis Überblick Problembeschreibung ...

Erläuterung der Lösung zur mobilen H5-Bildgenerierung in JavaScript

Derzeit gibt es viele Betriebsaktivitäten für öff...

Implementierungsideen für die Synchronisierung von Docker-Registry-Images

Einleitung Bisher wurden unsere Docker-Images in ...

Meta-Tags einfach erklärt

Der META-Tag, umgangssprachlich auch als Tag beze...

Tutorial zur Installation des GreasyFork-JS-Skripts auf dem Mobiltelefon

Inhaltsverzeichnis Vorwort 1. Iceraven-Browser (F...

Eine kurze Diskussion über mehrere aufgetretene Browserkompatibilitätsprobleme

Hintergrund Das Lösen von Browserkompatibilitätsp...

Reines CSS3 zum Erstellen eines Beispielcodes für Seitenwechseleffekte

Das, was ich vorher geschrieben habe, ist zu komp...

Vue-Implementierungsbeispiel mit Google Recaptcha-Verifizierung

In unserem aktuellen Projekt müssen wir die Googl...

Detaillierte Schritte zur Installation von MySQL 5.7 über YUM auf CentOS7

1. Gehen Sie zu dem Speicherort, an dem Sie das I...

Vue implementiert die Anzeige und Ausblendung der dreistufigen Navigation

In diesem Artikelbeispiel wird der spezifische Co...