js native Wasserfall-Flow-Plugin-Produktion

js native Wasserfall-Flow-Plugin-Produktion

In diesem Artikel wird der spezifische Code des nativen Wasserfall-Flow-Plugins von js zu Ihrer Information freigegeben. Der spezifische Inhalt ist wie folgt

Sehen Sie zuerst den Effekt

Es ist dasselbe wie der normale Wasserfallfluss. Beim Aufruf müssen Sie den Container, das Bild und die Bildbreite übergeben, um den Wasserfallfluss direkt zu generieren.

Schauen wir uns ohne weitere Umschweife den Code an und sprechen wir dann über die Idee.

1.html und Aufruf, wobei HTML nur eine Zeile benötigt

<Text>
    <div Klasse="main"></div>
 
    <script src="index.js"></script>
    <Skript>
        // Der erste Parameter, Wasserfallcontainer var dom = document.getElementsByClassName("main")[0];
        // Der zweite Parameter, der Bildlink, wird in ein Array geschrieben var imgArr = ["img/0.jpg","img/45.jpg","img/225.jpg","img/3.png","img/7729.png","img/a.jpg","img/ama.jpg","img/c.png","img/0.jpg","img/3.png","img/45.jpg","img/225.jpg","img/7729.png","img/a.jpg","img/ama.jpg","img/c.png",];
        //Rufen Sie das Plug-In auf und übergeben Sie Parameter. Der dritte ist die Bildbreite.waterFallFlow(dom,imgArr,220);
    </Skript>
</body>

2. HTML entspricht CSS

.main ist der übergebene Container, wobei position: relative; erforderlich ist.

Dann ist .main img{transition: all 0.5s;} der Animationscode, der allen Bildern im Container hinzugefügt wird

.hauptsächlich{
    Rand: 1px durchgezogen #ccc;
    Breite: 90%;
    Rand: 0 automatisch;
    Position: relativ;
}
.Hauptbild{
    Übergang: alle 0,5 s;
}

Dann js

/**
 * @param {*} dom stellt den Wasserfallcontainer dar* @param {*} imgArr Bildarray* @param {*} wid Bildbreite*/
Funktion WasserfallFluss(dom, imgArr, wid) {
    var gap; //Lücke var colNumber; //Anzahl der Spalten imgDom();
    setImgPos();
    //Wenn sich das Fenster ändert window.onresize = function(){
        setImgPos();
    }
    /**var Timer = null;
     * Es ist reibungslos, wie oben beschrieben, beeinträchtigt jedoch die Leistung zu sehr. Beim Ziehen des Fensters * wird die Funktion sehr häufig aufgerufen, um die Bilder neu aufzunehmen und anzuordnen * 
     * Das schaffst du, Anti-Shake* 
     * Fenster.onresize = Funktion(){
     * wenn(Zeitgeber){
     * clearIntval(Zeitgeber);
     * }
     * Timer = setzeTimeout(Funktion(){
     * setImgPos();
     * },300);
     * }
     * 
     */
    // DOM-Element generieren Funktion imgDom() {
        für (sei i = 0; i < imgArr.length; i++) {
            const url = imgArr[i];
            let img = document.createElement("img");
            img.src = URL;
            img.style.width = Breite + "px";
            img.style.position = "absolut";
            // Alle Bilder verwenden die absolute Positionierung img.style.left = "";
            img.style.top = "";
            img.onload = Funktion(){
                setImgPos(); //Asynchrones Laden von Bildern}
            dom.appendChild(img);
        }
    }
    // Die Koordinaten jedes Bildes festlegen function setImgPos() {
        kal();
        var colY = new Array(colNumber); //Speichere die Y-Koordinate des nächsten Bildes in jeder Spalte colY.fill(0); //Fülle das Array auf 0
        für (lass i = 0; i < dom.children.length; i++) {
            var imgM = dom.children[i];
            var y = Math.min(...colY); // Minimalwert finden var index = colY.indexOf(y); // Spalte var x = (index + 1) * gap + index * wid;
            imgM.style.left = x + "px";
            imgM.style.top = y + "px";
            //Array aktualisieren colY[index] += parseInt(imgM.height)+gap;
        }
        //Finden Sie die größte Zahl im Array, um das Problem des Zusammenbruchs des übergeordneten Divs zu lösen. var h = Math.max(...colY);
        console.log(h);
        dom.style.height = h + "px";
    }
    // Relevante Daten berechnen Funktion cal() {
        var containerWidth = parseInt(dom.clientWidth);
        colNumber = Math.floor(containerWidth / wid); //Anzahl der Spalten var space = containerWidth - colNumber * wid;
        Lücke = Leerzeichen / (Spaltennummer + 1); //Lücke berechnen}
}

Grundsätzlich habe ich Kommentare geschrieben, Sie können sie verstehen

Sehen wir uns die Idee an

1. Akzeptieren Sie die übergebenen Parameter, Container, Bildarray, Bildbreite

2. Bildelement erstellen und in den entsprechenden Container einfügen

3. Legen Sie die Breite und Höhe jedes Bildes fest, berechnen Sie die Anzahl der Spalten und den Abstand

4. Ordnen Sie die Bilder mit absoluter Positionierung an und berechnen Sie die entsprechenden linken und oberen Werte, dh die entsprechenden x- und y-Koordinaten

Die ersten drei Schritte sollten in Ordnung sein, schauen wir uns den vierten Schritt an

Die Idee ist folgende

Die Grundidee besteht darin, die kürzeste Spalte zu finden, um das nächste Bild anzuordnen. Jetzt erscheint das kürzeste in der zweiten Spalte.

Zu diesem Zeitpunkt wird das Bild der zweitkürzesten Spalte hinzugefügt. Suchen Sie nun weiter nach der kürzesten Spalte und fügen Sie weitere Bilder hinzu.

Auf diese Weise ist die Anordnung des Wasserfallflusses abgeschlossen. Schauen wir uns den spezifischen Prozess an

Berechnen Sie zunächst, wie viele Bildspalten es gibt, erstellen Sie ein Array mit einer Länge gleich der Anzahl der Spalten, füllen Sie alle mit 0 und verwenden Sie es später zum Speichern der Y-Koordinaten.

Durchlaufen Sie die Unterelemente im Container, finden Sie in der Schleife den Mindestwert im aktuellen Array, und die Position (Spaltennummer) des Mindestwerts ist die Y-Koordinate

Jetzt können wir die x-Koordinate finden.

x = (Anzahl der Spalten + 1) * Abstand + aktuelle Spalte * Breite (der tatsächlich übergebene Parameter)

Es gibt also einen Ort

Beachten Sie, dass Sie das Array jedes Mal aktualisieren müssen, d. h. die Y-Koordinate der hinzugefügten Bildposition und das asynchrone Laden des Bildes ändern müssen.

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:
  • Natives JS-Wasserfall-Plugin
  • Macy.js, ein reines natives JS-Wasserfall-Flow-Plug-In für das Front-End-Essential-Plug-In
  • js benutzerdefiniertes Wasserfall-Layout-Plugin

<<:  So konfigurieren Sie einfach mehrere Server in Nginx

>>:  HTML-Tag Marquee realisiert verschiedene Scroll-Effekte (ohne JS-Steuerung)

Artikel empfehlen

Verwenden Sie Vue3 zur Datenbindung und Anzeigelistendaten

Inhaltsverzeichnis 1. Vergleich mit Vue2 1. Neue ...

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

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

HTML-Grundlagen: HTML-Inhaltsdetails

Beginnen wir mit dem Körper: Wenn Sie eine Webseit...

Fünf Möglichkeiten zur Implementierung der Vererbung in js

Ausleihen von Konstruktoren Die Grundidee dieser ...

Einführung in die Verwendung gängiger Dockerfile-Befehle

Inhaltsverzeichnis 01 CMD 02 EINSTIEGSPUNKT 03 AR...

Tutorial zur Verwendung von Hyperlink-Tags in XHTML

Hyperlink, auch „Link“ genannt. Man kann sagen, d...

Verwenden von CSS3 zum Erstellen von Header-Animationseffekten

Die offizielle Website von Netease Kanyouxi (http...

Führen Sie die Schritte aus, um den Fehler 403 Forbidden in Nginx zu beheben.

Die Webseite zeigt 403 Forbidden an Nginx (Yum-In...