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:
|
<<: So konfigurieren Sie einfach mehrere Server in Nginx
>>: HTML-Tag Marquee realisiert verschiedene Scroll-Effekte (ohne JS-Steuerung)
Ob es sich nun um das Hintergrundbild oder die Tex...
Wenn Sie HTML-Div-Blöcke verwenden und die Mitte ...
Bei der Entwicklung von Web-Frontends entwerfen U...
Inhaltsverzeichnis 1. Betrieb der Datenbank 1.1 E...
Passwortmodus PDO::__construct(): Der Server hat ...
Inhaltsverzeichnis Verwendung von CURRENT_TIMESTA...
Wenn Sie ein Upgrade in einer formalen Umgebung d...
Inhaltsverzeichnis Vorwort Umfeld Installieren Er...
Karussellanzeige der Vue-Karte beim Umschalten de...
1. Erklärung von provide und inject Mit „Bereitst...
Vorwort Dies ist eine neue Funktion, die ich kürz...
Vorwort Die Benutzeroberfläche von Deepin sieht w...
Inhaltsverzeichnis Vorwort: 1. Einführung in die ...
<br />Originalquelle: http://www.a-xuan.cn/?...
Wenn wir langen Text anzeigen, müssen wir auf der ...