JavaScript zum Erzielen eines elastischen Navigationseffekts

JavaScript zum Erzielen eines elastischen Navigationseffekts

In diesem Artikel wird der spezifische Code für JavaScript zur Erzielung elastischer Navigationseffekte zu Ihrer Information bereitgestellt. Der spezifische Inhalt ist wie folgt

Hauptsächlich mit offsetX

1. Bauen Sie zuerst das Gerüst auf:

* {
      Rand: 0;
      Polsterung: 0;
        }
        
        .nav {
            Breite: 900px;
            Höhe: 63px;
            Hintergrund: URL (Bilder/doubleOne.png) keine Wiederholung rechts in der Mitte;
            Rand: 1px durchgezogen #ccc;
            Rand: 100px automatisch;
            Position: relativ;
        }
        
        ul {
            Position: relativ;
            Z-Index: 999;
        }
        
        ul>li {
            Listenstil: keiner;
            schweben: links;
            Breite: 88px;
            Höhe: 63px;
            Zeilenhöhe: 63px;
            Textausrichtung: zentriert;
        }
        
        Spanne {
            Anzeige: Inline-Block;
            Breite: 88px;
            Höhe: 63px;
            Hintergrund: URL("images/tMall.png") keine Wiederholung;
            Position: absolut;
            links: 0;
            oben: 0;
}
<div Klasse="nav">
        <ul>
            <li>Doppel-11-Karneval</li>
            <li>Veranstaltungsort für Bekleidung</li>
            <li>Digitale Haushaltsgeräte</li>
            <li>Baumaterialien für den Hausbau</li>
            <li>Mutter- und Babykleidung</li>
            <li>Mobiler Veranstaltungsort</li>
            <li>Schönheits- und Make-up-Salon</li>
            <li>Veranstaltungsort importieren</li>
            <li>Fliggy-Reisen</li>
        </ul>
        <span></span>
</div> 

2. Schreiben Sie den Logikteil

//1. Das zu bearbeitende Element abrufen const oItems = document.querySelectorAll("li");
 let oSpan = document.querySelector("span");
 
//2. Warten Sie auf Klickereignisse jedes Menüs for (let i = 0; i < oItems.length; i++) {
            Füge die folgenden Elemente hinzu:
            item.onclick = Funktion() {
                //offsetLeft ruft den Offset des angeklickten Elements vom ersten positionierten Vorgängerelement ab // console.log(this.offsetLeft);
                // oSpan.style.left = this.offsetLeft + 'px';
                //Funktion easeAnimation(oSpan, { aufrufen
                    "links": dies.offsetLeft
                });
            };
        }

animation.js

(Funktion() {
    /**
     * Animation mit gleichmäßiger Geschwindigkeit* @param {*} ele Element, das animiert werden soll* @param {*} obj Welche Attribute des Elements animiert werden sollen* @param {*} fn Operationen, die möglicherweise nach Abschluss der Animation ausgeführt werden müssen* 
     * Referenz der aufrufenden Methode* linearAnimation(oDiv, {
                "marginTop": 500,
                "marginLeft": 300
        });
     */
    Funktion linearAnimation(ele, obj, fn) {
        Intervall löschen(ele.timerId);
        ele.timerId = setzeIntervall(Funktion() {
            //Die Flag-Variable wird verwendet, um zu markieren, ob alle Eigenschaften die Animation abgeschlossen haben. let flag = true;
 
            für (let key in obj) {
                let Ziel = Objekt[Schlüssel];
 
                // 1. Aktuelle Position des Elements abrufen // let begin = parseInt(ele.style.width) || 0;
                let style = getComputedStyle(ele);
                // beginne = parseInt(style.width) || 0;
                lass begin = parseFloat(Stil[Schlüssel]) || 0;
 
                // 2. Definieren Sie Variablen zum Aufzeichnen der Schrittlänge: let step = (begin - target) > 0 ? -13 : 13;
 
                // 3. Berechnen Sie die neue Position begin += step;
                // console.log(Math.abs(Ziel - Beginn), Math.abs(Schritt));
                if (Math.abs(target - begin) > Math.abs(step)) { //Animation nicht abgeschlossen flag = false;
                } else { //Nach dem Ausführen der Animation begin = target;
                }
 
                // 4. Setzt die Position des Elements zurück // ele.style.width = begin + "px";
                ele.style[Schlüssel] = begin + "px";
            }
 
            //Beurteilen, ob die Animation ausgeführt wurde, wenn (Flag) {
                //Nachdem die Animation beendet ist, schalte den Timer aus clearInterval(ele.timerId);
 
                //Beurteilen Sie, ob die fn-Funktion übergeben wurde. Führen Sie sie aus, wenn sie übergeben wurde. Andernfalls führen Sie sie nicht aus. // if (fn) {
                // fn();
                // }
                fn && fn();
            }
        }, 100);
    }
 
    //Einfache Animationsfunktion easeAnimation(ele, obj, fn) {
        Intervall löschen(ele.timerId);
        ele.timerId = setzeIntervall(Funktion() {
            //Die Flag-Variable wird verwendet, um zu markieren, ob alle Eigenschaften die Animation abgeschlossen haben. let flag = true;
 
            für (let key in obj) {
                let Ziel = Objekt[Schlüssel];
 
                // 1. Aktuelle Position des Elements abrufen let style = getComputedStyle(ele);
                lass beginne = parseInt(Stil[Schlüssel]) || 0;
 
                // 2. Variable Datensatzschrittweite definieren // Formel: (Endposition - Startposition) * Beschleunigungskoeffizient (0 ~ 1)
                sei Schritt = (Ziel – Beginn) * 0,3;
 
                // 3. Berechnen Sie die neue Position begin += step;
                wenn (Math.abs(Math.floor(Schritt)) > 1) {
                    Flagge = falsch;
                } anders {
                    Beginn = Ziel;
                }
                // 4. Setzt die Position des Elements zurück ele.style[key] = begin + "px";
            }
 
            //Beurteilen, ob die Animation ausgeführt wurde, wenn (Flag) {
                //Nachdem die Animation beendet ist, schalte den Timer aus clearInterval(ele.timerId);
 
                //Beurteilen, ob die fn-Funktion übergeben wurde, und wenn ja, sie ausführen, andernfalls nicht ausführen fn && fn();
            }
        }, 100);
    }
 
    // Binden Sie die Funktion an das Fensterobjekt, damit sie global verwendet werden kann window.linearAnimation = linearAnimation;
    Fenster.easeAnimation = easeAnimation;
})(); 

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:
  • Reines JS, um einen elastischen Navigationsleisteneffekt zu erzielen

<<:  So behalten Sie den Inhalt im Container, wenn das Flex-Layout durch untergeordnete Elemente gestreckt wird

>>:  9 Tipps für das Webseiten-Layout

Artikel empfehlen

Eine detaillierte Einführung in Linux-Dateiberechtigungen

Die Stärke von Linux liegt in seinem Mehrbenutzer...

Einige häufige Fehler mit MySQL null

Laut Nullwerten bedeutet der Wert Null in MySQL l...

Praktische Optimierung des MySQL-Paging-Limits

Vorwort Wenn wir Abfrageanweisungen verwenden, mü...

Zusammenfassung der 7 Fallstricke bei der Verwendung von React

Inhaltsverzeichnis 1. Komponentenaufblähung 2. Än...

Eine kurze Analyse der Verwendung der Zero-Copy-Technologie in Linux

In diesem Artikel werden mehrere wichtige Zero-Co...

So legen Sie mit CSS eine Hintergrundunschärfe fest

Beim Erstellen einiger Seiten müssen wir häufig H...

Ubuntu Docker-Installation in VMware (Containererstellung)

1. Mindmap 2. So bauen Sie einen Container 2.1 Vo...

Der Unterschied zwischen Hash-Modus und Verlaufsmodus im Vue-Router

vue-router hat zwei Modi Hash-Modus Verlaufsmodus...