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

WEB Standard-Webseitenstruktur

Ob es sich nun um das Hintergrundbild oder die Tex...

Lösung für die Lücke zwischen Divs

Wenn Sie HTML-Div-Blöcke verwenden und die Mitte ...

Drei Möglichkeiten zum Implementieren eines Textfarbverlaufs in CSS

Bei der Entwicklung von Web-Frontends entwerfen U...

Was bei der Migration von MySQL auf 8.0 zu beachten ist (Zusammenfassung)

Passwortmodus PDO::__construct(): Der Server hat ...

So verwenden Sie CURRENT_TIMESTAMP in MySQL

Inhaltsverzeichnis Verwendung von CURRENT_TIMESTA...

Tutorial zum Upgrade von Centos7 auf Centos8 (mit Bildern und Text)

Wenn Sie ein Upgrade in einer formalen Umgebung d...

Docker-Installations- und Konfigurationsschritte für MySQL

Inhaltsverzeichnis Vorwort Umfeld Installieren Er...

Vue implementiert Card-Flip-Karussellanzeige

Karussellanzeige der Vue-Karte beim Umschalten de...

Verwendung von Provide und Inject in Vue3

1. Erklärung von provide und inject Mit „Bereitst...

Grundlegende Verwendung der Funktion find_in_set in MySQL

Vorwort Dies ist eine neue Funktion, die ich kürz...

Ausführliches Tutorial zur Installation von Deepin in VMware15 (Bild und Text)

Vorwort Die Benutzeroberfläche von Deepin sieht w...

Detaillierte Erläuterung der MySQL-Benutzerrechteverwaltung

Inhaltsverzeichnis Vorwort: 1. Einführung in die ...

Facebooks nahezu perfekte Neugestaltung aller Internetdienste

<br />Originalquelle: http://www.a-xuan.cn/?...