JS implementiert Layoutkonvertierung in Animation

JS implementiert Layoutkonvertierung in Animation

Beim Schreiben von Animationen mit JS wird häufig die Layoutkonvertierung verwendet, d. h. die Umwandlung der relativen Positionierung in eine absolute Positionierung vor der Bewegung und anschließende Ausführung der Animationsfunktion. Hier ist eine Demo der Layoutkonvertierung, die durch natives JS implementiert wurde. Der Effekt ist wie folgt:

Nachfolgend sehen Sie die Codeimplementierung. Jeder kann sie kopieren, einfügen und kommentieren.

<!DOCTYPE html>
<html>
 
<Kopf>
    <meta http-equiv="Inhaltstyp" content="text/html; charset=utf-8" />
    <title>Natives JS implementiert Layoutkonvertierung in Animation</title>
    <Stil>
        * {
            Rand: 0;
            Polsterung: 0;
        }
 
        #ul1 {
            Breite: 366px;
            Rand: 0 automatisch;
            Position: relativ;
        }
 
        #ul1 li {
            Listenstil: keiner;
            Breite: 100px;
            Höhe: 100px;
            Hintergrund: #CCC;
            Rand: 1px tief schwarz;
            schweben: links;
            Rand: 10px;
            Z-Index: 1;
        }
    </Stil>
    <!-- Bewegungsrahmen -->
    <Skript>
        // Den Wert der angegebenen Stilfunktion abrufen getStyle(obj, attr) {
            wenn (obj.aktuellerStil) {
                returniere obj.currentStyle[attr];
            } anders {
                gibt getComputedStyle zurück (Objekt, false) [attr];
            }
        };
        //Bewegungsfunktion function startMove(obj, json, fn) {
            Intervall löschen(Objekt.Timer);
            obj.timer = setzeIntervall(Funktion () {
                var bStop = true;
                für (var attr in json) {
                    var iCur = 0;
                    wenn (attr == 'Deckkraft') {
                        iCur = parseInt(parseFloat(getStyle(obj, attr)) * 100);
                    } anders {
                        iCur = parseInt(getStyle(obj, attr));
                    }
                    var iSpeed ​​​​= (json[attr] – iCur)/8;
                    iSpeed ​​​​= iSpeed ​​​​> 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
                    wenn (iCur != json[attr]) {
                        bStop = falsch;
                    }
                    wenn (attr == 'Deckkraft') {
                        obj.style.filter = 'Alpha(Deckkraft:' + (iCur + iSpeed) + ')';
                        obj.style.opacity = (iCur + iSpeed) / 100;
                    } anders {
                        obj.style[attr] = iCur + iSpeed ​​​​+ 'px';
                    }
                }
 
                wenn (bStop) {
                    Intervall löschen(Objekt.Timer);
                    wenn (fn) {
                        fn();
                    }
                }
            }, 30)
        }
    </Skript>
    <!-- Ereignis hinzufügen -->
    <Skript>
        fenster.onload = Funktion () {
            var oUl = document.getElementById('ul1');
            var aLi = oUl.getElementsByTagName('li');
            var iMinZindex = 2;
            var i = 0;
 
            // 1. Layoutkonvertierung für (i = 0; i < aLi.length; i++) {
                //aLi[i].innerHTML='links:'+aLi[i].offsetLeft+', oben:'+aLi[i].offsetTop;
                aLi[i].style.left = aLi[i].offsetLeft + 'px';
                aLi[i].style.top = aLi[i].offsetTop + 'px';
            }
 
            // Es werden zwei Schleifen benötigt for (i = 0; i < aLi.length; i++) {
                aLi[i].style.position = 'absolut';
                //In der ersten Schleife wurde der Offsetwert bereits als ursprünglicher Randwert berechnet und muss daher hier gelöscht werden aLi[i].style.margin = '0';
            }
 
            // 2. Ereignis hinzufügen für (i = 0; i < aLi.length; i++) {
 
                aLi[i].onmouseover = Funktion () {
                    //Lassen Sie den aktuellen zIndex weiter ansteigen, um ein Stapeln zu verhindern. this.style.zIndex = iMinZindex++;
                    starteBewegung(diese, {
                        Breite: 200,
                        Höhe: 200,
                        Rand links: -50,
                        marginTop: -50
                    });
                };
 
                aLi[i].onmouseout = Funktion () {
                    starteBewegung(diese, {
                        Breite: 100,
                        Höhe: 100,
                        Rand links: 0,
                        Rand oben: 0
                    });
                };
            }
        };
    </Skript>
 
</Kopf>
 
<Text>
    <ul-ID="ul1">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
 
</html>

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:
  • Vue.js implementiert eine Konvertierungsmethode für das Rasterlistenlayout

<<:  Tutorial zur Installation von MySQL 8.0.18 unter Windows (Community Edition)

>>:  Zusammenfassung der Wissenspunkte zu den grundlegenden Attributen von Linux-Dateien

Artikel    

Artikel empfehlen

JS beherrscht schnell die Verwendung von ES6-Klassen

1. Wie konstruieren? Lassen Sie uns die allgemein...

Automatische Dateisynchronisierung zwischen zwei Linux-Servern

Wenn Server B (172.17.166.11) eingeschaltet oder ...

HTML-Multimediaanwendung: Einfügen von Flash-Animationen und Musik in Webseiten

1. Anwendung von Multimedia in HTML_Flash-Animati...

Wissen Sie, wie man Mock in einem Vue-Projekt verwendet?

Inhaltsverzeichnis Erster Schritt: Der zweite Sch...

Verwenden Sie JavaScript, um Seiteneffekte zu erstellen

11. Verwenden Sie JavaScript, um Seiteneffekte zu...

Bauprozess eines privaten Docker-Lagerhafens

1. Vorbereitung 1.1 Hafen herunterladen Harbor-Do...

Tutorial zur Installation von VMware, Nmap und Burpsuite

Inhaltsverzeichnis VMware BurpSuite 1. Virtuelles...

Detaillierte Analyse der MySQL-Sperrblockierung

Bei der täglichen Wartung werden Threads häufig b...

Mehrere Möglichkeiten zum Einfügen von SVG in HTML-Seiten

SVG (Scalable Vector Graphics) ist ein Bildformat...

Beispielschritte zur Verwendung von AntV X6 mit Vue.js

Inhaltsverzeichnis 0x0 Einführung 0x1 Installatio...

Node+Socket realisiert einfache Chatroom-Funktion

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

HTML-Tutorial: Das Optgroup-Element verstehen

Wählen Sie die Kategorieauswahl. Nach Tests könne...

JavaScript-Verlaufsobjekt erklärt

Inhaltsverzeichnis 1. Routennavigation 2. API zur...