Natives js zum Erreichen eines einfachen Karusselleffekts

Natives js zum Erreichen eines einfachen Karusselleffekts

In diesem Artikel wird der spezifische Code von js zur Erzielung eines einfachen Karusselleffekts als Referenz bereitgestellt. Der spezifische Inhalt ist wie folgt

Die Wirkung ist wie folgt:

analysieren:

Ergebnisse der Analyse:

Analyse und Umsetzung:

1. Holen Sie sich über document.querySelector('.class name') die große Box (.carousel), die das Karussell enthält, das übergeordnete Element (.chevron) des Etiketts, das die linken und rechten Schaltflächen des Karussells enthält, holen Sie sich die linken und rechten Schaltflächen (.chevron-left, .chevron-right), holen Sie sich das übergeordnete Element ul (.carousel-body), das die Karussellbilder enthält [Hinweis: hier holen wir ul statt li, weil sich beim Verschieben des Karussells das gesamte ul zusammen bewegt] und holen Sie sich schließlich das li, das die Karussellbilder enthält (.indicators li).

//Eine große Box für das Karussell let oCarousel = document.querySelector('.carousel')
//Das übergeordnete Element der Beschriftung für die linken und rechten Schaltflächen des Karussells let oChevron = document.querySelector('.chevron')
//Linke Taste let oLeft = document.querySelector('.chevron-left')
//Rechte Taste let oRight = document.querySelector('.chevron-right')
//Holen Sie sich das übergeordnete Element ul, in dem das Karussellbild platziert ist
let oUl = document.querySelector('.carousel-body')
//Holen Sie sich das li, das das Karussellbild enthält
let oActives = document.querySelectorAll('.indicators li')

2. Klicken Sie auf die linke und rechte Schaltfläche, um das Karussellbild zum vorherigen oder nächsten Bild zu bewegen:

Kapseln Sie zunächst eine Animation()-Funktion ein, um mehrere Aufrufe zu ermöglichen

Funktion Animation (Objekt, Ziel) {
    // Lösche den Timer clearInterval(obj.timer)
        obj.timer = setzeInterval(()=>{
            // Aktuelle Position des Elements lesen let curX=obj.offsetLeft
 
            //Definieren Sie eine Schrittweite let step=10
            // Bestimmen Sie die Bewegungsrichtung (vergleichen Sie die Größe der Zielposition mit der aktuellen Position) 
            wenn(Ziel<aktuellX){
                Schritt=-10
            }
            // Entsprechend der Beziehung zwischen der aktuellen Position, der Zielposition und der Schrittlänge, // Solange der Abstand zwischen der Zielposition und der aktuellen Position kleiner als die Schrittlänge ist, wird die Position des Elements direkt auf die Zielposition gesetzt if (Math.abs (target-curX) < Math.abs (step)) {
                obj.stil.links=Ziel+'px'
                Intervall löschen(obj.timer)
            }anders{
                //Berechnen Sie die Position des nächsten Schritts let nextX=curX+step
                // Weisen Sie obj.style.left die Position des nächsten Schritts zu.
                obj.style.left=nextX+'px'
            }
        },10)
    }

①Da die linken und rechten Pfeile im Karussell ausgeblendet sind, bevor die Maus in das Karussell bewegt wird, werden sie angezeigt, wenn die Maus in das Karussell bewegt wird. Daher ist es notwendig, die Ereignisse „Maus rein“ (onmouseover) und „Maus raus“ (onmouseout) für die große Box (.carousel) zu binden, die das Karussell enthält.

oCarousel.onmouseover = Funktion () {
        oChevron.style.display = "Block"
    }
 
    oCarousel.onmouseout = Funktion () {
        oChevron.style.display = "keine"
    }

② Binden Sie Klickereignisse an die linke und rechte Schaltfläche und definieren Sie eine globale Zählervariable n, die die Position des Bildes im Karussell darstellt. Da die Größe eines li hier 500 Pixel beträgt, legen Sie eine globale Variablenschrittgröße von 500 fest (die Schrittgröße ist die Entfernung jeder Bewegung von ul im Karussell).

sei n = 0
sei Schritt = 500
    oLeft.onclick = Funktion () {
        N--
        
        wenn (n == -1) {
       //Wenn Sie zum ersten Bild wechseln (n = 0), klicken Sie erneut (n = -1), setzen Sie n auf 4 und springen Sie zur Position des letzten Bildes. //Die Position der UL, die das Karussellbild enthält, wird auf die Position des letzten Bildes geändert (da die Breite eines Bildes 500 Pixel beträgt, befindet sich das letzte Bild bei 5 * 500 = 2500).
            oUl.style.left = -2500 + 'px'
            n = 4
        }
        //Ziel ist die Bewegungsdistanz, d.h.: das n-te Bild * die Breite jedes Bildes 
        let target = -n * Schritt
        Animation (oUl, Ziel)
 
    }
    oRechts.onclick = Funktion () {
        n++
        wenn (n == 6) {
        //Wenn Sie zum letzten Bild (n=5) wechseln, klicken Sie erneut (n=6), setzen Sie n auf 1 und springen Sie zur Position des ersten Bildes oUl.style.left = 0 + 'px'
            n = 1
        }
        let target = -n * Schritt
        Animation (oUl, Ziel)
 
    }

3. Klicken Sie auf die Nummer unten, um das Karussell zu wechseln.

//Da das oben über document.querySelectorAll('.indicators li') erhaltene li in Form eines Pseudo-Arrays zurückgegeben wird, ist es notwendig, das Pseudo-Array zu durchlaufen, um das Klickereignis für jedes li zu binden for (let i = 0; i < oActives.length; i++) {
        oActives[i].onclick = Funktion () {
            //Stellen Sie den Stil des angeklickten Elements so ein, dass es hervorgehoben wird. setActive(i)
            //Und n den Wert von i zuweisen (entspricht der Aufzeichnung, dass aktuell das i-te Bild angezeigt werden soll)
            n = ich
            //Stellen Sie die Bewegungsdistanz ein let target = -n * step
            Animation (oUl, Ziel)
        }
    }
 
    // Kapseln Sie eine Funktion zum Hervorheben ein li function setActive(ind) {
        // Exklusives Denken anwenden: alles löschen und dann den Klassennamen separat festlegen für (let j = 0; j < oActives.length; j++) {
            oActives[j].className = ''
        }
        oActives[ind].className = 'aktiv'
    }

Ändern Sie die Situation in Schritt 2, in der die Hervorhebung der Seite unter der Diashow beim Klicken auf die linken und rechten Pfeile unverändert bleibt

oLeft.onclick = Funktion () {
        N--
        wenn (n == -1) {
            oUl.style.left = -2500 + 'px'
            n = 4
        }
        //Rufen Sie die Funktion setActive () auf, um den Hervorhebungsstatus der n-ten Bildseitennummer setActive (n) zu ändern.
        let target = -n * Schritt
        Animation (oUl, Ziel)
 
    }
    oRechts.onclick = Funktion () {
        n++
        wenn (n == 6) {
            oUl.style.left = 0 + 'px'
            n = 1
        }
        //Wenn n 5 ist, bedeutet das, dass wir das 6. Bild erreicht haben (das 6. Bild ist dasselbe wie das 1. Bild, wird aber für den gleitenden Übergang verwendet, um den Effekt eines plötzlichen Sprungs zu verhindern), also müssen wir die Seitenzahl auf 0 setzen (das erste Bild), um es hervorzuheben. //Hier verwenden wir einen ternären Ausdruck. Wenn n 5 ist, setze das 1. Bild zum Hervorheben, andernfalls setze das n-te Bild zum Hervorheben. n == 5 ? setActive(0) : setActive(n)
        let target = -n * Schritt
        Animation (oUl, Ziel)
 
    }

4. Stellen Sie einen Timer ein, löschen Sie den Timer, wenn das Karussell eingefahren wird, und starten Sie den Timer, wenn es ausgefahren wird (um die automatische Wiedergabe beim Einfahren zu stoppen und die automatische Wiedergabe beim Ausfahren zu starten).

//Beim Laden der Seite muss zuerst der Timer eingeschaltet werden, sonst wird das Karussell nicht automatisch abgespielt. Es muss auf ein Move-In- und Move-Out-Ereignis gewartet werden, um den Timer zu starten timer = setInterval(function () {
            //Rufen Sie das Klickereignis oRight.onclick() auf, das an die rechte Schaltfläche gebunden ist
        }, 2000)
 
    //Wenn die Maus bewegt wird, zeige die linken und rechten Pfeile an und lösche den Timer oCarousel.onmouseover = function () {
        oChevron.style.display = "Block"
        Intervall löschen(Timer)
    }
 
    //Wenn die Maus herausbewegt wird, verstecke die linken und rechten Pfeile und starte den Timer oCarousel.onmouseout = function () {
        oChevron.style.display = "keine"
        Timer = Intervall festlegen(Funktion () {
            oRechts.onclick()
        }, 2000)
    }

Der vollständige Code lautet wie folgt:

Die CSS-Stile sind wie folgt:

* {
     Rand: 0;
     Polsterung: 0;
        }
 
        .Karussell {
            Breite: 500px;
            Höhe: 200px;
            Rand: 1px durchgehend rot;
            Rand: 100px automatisch;
            Position: relativ;
            Überlauf: versteckt;
        }
        .Karussell li {
            Listenstil: keiner;
        }
 
        /* Karussellinhalt*/
        .Karussell-Body {
            Breite: 3000px;
            Höhe: 200px;
            Position: absolut;
        }
        .Karussell-Body li {
            Listenstil: keiner;
            schweben: links;
            Breite: 500px;
            Höhe: 200px;
        }
 
        .Karussell-Body li img {
            Breite: 100 %;
            Höhe: 100%;
        }
 
 
        /* Linke und rechte Fokustasten */
        .Karussell .Chevron {
            Position: absolut;
            oben: 50 %;
            Höhe: 40px;
            Breite: 100 %;
            transformieren: verschiebeY(-50%);
            Anzeige: keine;
        }
 
        .Karussell .Chevron-links,
        .Karussell .Chevron-rechts {
            Breite: 40px;
            Höhe: 40px;
            Hintergrund: #000;
            Cursor: Zeiger;
            Textausrichtung: zentriert;
            Zeilenhöhe: 40px;
            Schriftgröße: 30px;
            Schriftstärke: fett;
            Farbe: #fff;
            Deckkraft: .3;
            Rand: 1px durchgezogen #fff;
        }
 
 
        .Karussell .chevron-links {
            schweben: links;
            Rand links: 10px;
        }
 
 
        .Karussell .Chevron-rechts {
            schweben: rechts;
            Rand rechts: 10px;
        }
 
 
        /* 5.2 Struktur des Karussellindikators*/
        .Karussell .Indikatoren {
            Position: absolut;
            rechts: 30px;
            unten: 20px;
        }
 
        .Karussell .Indikatoren li {
            schweben: links;
            Breite: 20px;
            Höhe: 20px;
            Rand rechts: 10px;
            Hintergrund: rgba(255, 255, 255, .8);
            Textausrichtung: zentriert;
            Zeilenhöhe: 20px;
            Cursor: Zeiger;
            Farbe: rgba(0, 0, 0, .5);
        }
 
        .Karussell .Indikatoren li.aktiv {
            Hintergrund: #09f;
            Farbe: rot;
 }

Das HTML lautet wie folgt:

<div Klasse="Karussell">
        <!-- Karussellinhalt-->
        <ul Klasse="Karussell-Body">
            <li><a href="#"><img src="./images/1.jpg" alt=""></a></li>
            <li><a href="#"><img src="./images/2.jpg" alt=""></a></li>
            <li><a href="#"><img src="./images/3.jpg" alt=""></a></li>
            <li><a href="#"><img src="./images/4.jpg" alt=""></a></li>
            <li><a href="#"><img src="./images/5.jpg" alt=""></a></li>
            <li><a href="#"><img src="./images/1.jpg" alt=""></a></li>
            <!-- a3.1 Füge ein neues li hinzu, das mit dem ersten identisch ist-->
            <!-- <li><a href="#"><img src="./images/1.jpg" alt=""></a></li> -->
        </ul>
        <!-- Linke und rechte Fokustasten -->
        <div Klasse="chevron">
            <div class="chevron-left">&laquo;</div>
            <div class="chevron-right">&raquo;</div>
        </div>
        <!-- 5.1 Struktur des Karussellindikators-->
        <ol Klasse="Indikatoren">
            <li Klasse="aktiv">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ol>
</div>

js lautet wie folgt:

let oCarousel = document.querySelector('.carousel')
let oChevron = document.querySelector('.chevron')
let oLeft = document.querySelector('.chevron-left')
let oRight = document.querySelector('.chevron-right')
let oUl = document.querySelector('.carousel-body')
let oActives = document.querySelectorAll('.indicators li')
 
    sei n = 0
    sei Schritt = 500
    Timer einschalten
    Timer = Intervall festlegen(Funktion () {
            oRechts.onclick()
        }, 2000)
    oCarousel.onmouseover = Funktion () {
        oChevron.style.display = "Block"
        Intervall löschen(Timer)
    }
 
    oCarousel.onmouseout = Funktion () {
        oChevron.style.display = "keine"
        Timer = Intervall festlegen(Funktion () {
            oRechts.onclick()
        }, 2000)
    }
    oLeft.onclick = Funktion () {
        N--
        wenn (n == -1) {
            oUl.style.left = -2500 + 'px'
            n = 4
        }
        setActive(n)
        let target = -n * Schritt
        Animation (oUl, Ziel)
 
    }
    oRechts.onclick = Funktion () {
        n++
        wenn (n == 6) {
            oUl.style.left = 0 + 'px'
            n = 1
        }
        n == 5 ? setActive(0) : setActive(n)
        let target = -n * Schritt
        Animation (oUl, Ziel)
 
    }
    für (lass i = 0; i < oActives.length; i++) {
        oActives[i].onclick = Funktion () {
            setActive(i)
            n = ich
            let target = -n * Schritt
            Animation (oUl, Ziel)
        }
    }
 
    // Kapseln Sie eine Funktion zum Hervorheben ein li function setActive(ind) {
        für (let j = 0; j < oActives.length; j++) {
            oActives[j].className = ''
        }
        oActives[ind].className = 'aktiv'
    }
 
    Funktion Animation (Objekt, Ziel) {
        // Lösche den Timer clearInterval(obj.timer)
        obj.timer = setzeInterval(()=>{
            // Aktuelle Position des Elements lesen let curX=obj.offsetLeft
 
            //Definieren Sie eine Schrittweite let step=10
            // Bestimmen Sie die Bewegungsrichtung (vergleichen Sie die Größe der Zielposition mit der aktuellen Position) 
            wenn(Ziel<aktuellX){
                Schritt=-10
            }
            // Entsprechend der Beziehung zwischen der aktuellen Position, der Zielposition und der Schrittlänge, // Solange der Abstand zwischen der Zielposition und der aktuellen Position kleiner als die Schrittlänge ist, wird die Position des Elements direkt auf die Zielposition gesetzt if (Math.abs (target-curX) < Math.abs (step)) {
                obj.stil.links=Ziel+'px'
                Intervall löschen(obj.timer)
            }anders{
                //Berechnen Sie die Position des nächsten Schritts let nextX=curX+step
                // Weisen Sie obj.style.left die Position des nächsten Schritts zu.
                obj.style.left=nextX+'px'
            }
        },10)
}

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:
  • JavaScript zur Implementierung eines einfachen Karusselldiagramms, umfassendste Codeanalyse (ES5)
  • Verwenden von js, um den Effekt eines Karussells zu erzielen
  • Verwenden von JavaScript zum Implementieren von Karusselleffekten
  • Karusselleffekte mit JavaScript implementieren
  • js, um den kompletten Code des Karussells zu implementieren
  • Beispielcode zur Implementierung eines Karussells mit nativem JS
  • js, um den Effekt der Unterstützung des Karussell-Bildbeispiels mit Schiebeschalter für Mobiltelefone zu erzielen
  • Einfacher Code zur Implementierung eines JS-Karusselldiagramms
  • js, um zu erreichen, klicken Sie auf die linke und rechte Schaltfläche, um Bilder abzuspielen
  • JavaScript zur Implementierung der umfassendsten Codeanalyse eines einfachen Karussells (objektorientiert ES6)

<<:  Detailliertes Installations- und Konfigurationstutorial zum MySQL-Flashback-Tool binlog2sql

>>:  Detailliertes Tutorial zum Ausführen von Tomcat im Debugmodus im IDEA Maven-Projekt

Artikel empfehlen

Detaillierter Installationsprozess und Prinzip des Vue-Routers

Inhaltsverzeichnis 1. Implementierungsprinzip des...

Lösung - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: Unzureichende Berechtigungen

1) Geben Sie den Ordnerpfad ein, in dem die JDK-D...

So sichern Sie MySQL regelmäßig und laden es auf Qiniu hoch

In den meisten Anwendungsszenarien müssen wir wic...

MySQL-Code zur Implementierung der Sequenzfunktion

MySQL implementiert Sequenzfunktion 1. Erstellen ...

Vollständiger Code zur Implementierung der Vue-Backtop-Komponente

Wirkung: Code: <Vorlage> <div Klasse=&qu...

Verwendung des Linux-Watch-Befehls

1. Befehlseinführung Der Befehl „Watch“ führt den...

HTML-Tutorial: Horizontales Liniensegment in HTML

<br />Dieses Tag kann eine horizontale Linie...

Allgemeine Schreibbeispiele für MySQL- und Oracle-Batch-Insert-SQL

Inhaltsverzeichnis Zum Beispiel: Allgemeines Schr...

Informieren Sie sich, wie HTML und Ressourcen geladen werden

Der gesamte Inhalt dieses Blogs ist unter Creativ...

Detaillierte Erklärung zur Verwendung der Vue h-Funktion

Inhaltsverzeichnis 1. Verstehen 2. Verwendung 1. ...