So verwenden Sie JS zum Implementieren des Wasserfalllayouts von Webseiten

So verwenden Sie JS zum Implementieren des Wasserfalllayouts von Webseiten

Vorwort:

Der Wasserfallfluss, auch als Wasserfalllayout bekannt, ist eine beliebte Methode zum Seitenlayout auf Websites. Das heißt, es werden mehrere Zeilen gleich breiter Elemente angeordnet und nacheinander folgende Elemente mit gleicher Breite, aber unterschiedlicher Höhe hinzugefügt. Die Bilder werden entsprechend ihrer ursprünglichen Proportionen skaliert, bis die Breite unseren Anforderungen entspricht, und nacheinander gemäß den Regeln an den angegebenen Positionen platziert.

Was ist ein Wasserfall-Layout?

Erster Blick auf die Wirkung:

  • Das Bild wird in mehreren Reihen gleich breiter Elemente angeordnet und die folgenden Elemente werden nacheinander hinzugefügt, mit gleicher Breite, aber unterschiedlicher Höhe. Das Bild wird gemäß seinen ursprünglichen Proportionen skaliert, bis die Breite unseren Anforderungen entspricht, und dann gemäß den Regeln nacheinander an den angegebenen Positionen platziert.
  • Zum besseren Verständnis hier die HTML- und CSS-Codes

Unvollständiger HTML-Code:

<div id="Behälter">
        <div Klasse="Box">
            <div Klasse="box-img">
                <img src="./img/1.jpg" alt="">
            </div>
        </div>
        <div Klasse="Box">
            <div Klasse="box-img">
                <img src="./img/2.jpg" alt="">
            </div>
        </div>
        <div Klasse="Box">
            <div Klasse="box-img">
                <img src="./img/3.jpg" alt="">
            </div>
        </div>
     </div>
     ......<!-- Bilder ausgelassen, Sie können entscheiden, wie viele Bilder Sie möchten-->

Vollständiger CSS-Code

*{
        Polsterung: 0;
        Rand: 0;
    }
    #Container{
        Position: relativ;
    }
    .Kasten{
        schweben: links;
        Polsterung: 15px;
    }
    .box-img {
        Breite: 150px;
        Polsterung: 5px;
        Rand: 1px durchgezogen #ccc;
        Kastenschatten: 0 0 5px #ccc;
        Rahmenradius: 5px;
    }
    .box-img img{
        Breite: 100 %;
        Höhe: automatisch;
    }

So erreichen Sie:

Kurz gesagt: Wenn Sie ein Wasserfall-Layout erreichen möchten, müssen Sie diese Dinge tun ✍

1. Holen Sie sich das Bild

Funktion getChildElement() {
    const contentArr = [] //Definieren Sie ein Array, um das Laden von Bildern vorzubereiten const parent = document.getElementById(container) //Holen Sie die gesamte Seite const allContent = parent.getElementsByTagName('*') //Holen Sie das gesamte Tag console.log(allContent);
    für (var i = 0; i < allContent.length; i++) {
      wenn (allContent[i].className == 'box') {
        contentArr.push(allContent[i])//Lade das Label der Klasse='box' in das Array}
    }
    Konsole.log(InhaltArr);
    return contentArr //Array zurückgeben}

2. Stellen Sie die Bildbandbreite ein

 var ccontent = getChildElemnt()
  var imgWidth = ccontent[0].offsetWidth // Alle Bilder gleich breit machen wie das erste Bild

3. Berechnen Sie die maximale Anzahl von Bildern, die in einer Zeile einer Browserseite gespeichert werden können

var dWidth = document.documentElement.clientWidth //Seitenbreite var num = Math.floor(dWidth / imgWidth)
//Math.floor() rundet ab

4. Bildhöhen vergleichen

Denn im Wasserfall-Layout sollte, wenn die erste Bilderreihe voll ist, das erste Bild der zweiten Reihe unter dem kleinsten Bild der ersten Reihe platziert werden.

var BoxHeightArr = [] //Definiere ein Array und trage nacheinander die Höhe aller Bilder darin ein for (var i = 0; i < ccontent.length; i++) {
      wenn (i < Zahl) {
        BoxHeightArr[i] = ccontent[i].offsetHeight //Speichere die Höhe des Bildes in einem Array} else { //Wenn die erste Zeile keine Bilder mehr aufnehmen kann var minHeight = Math.min.apply(null, BoxHeightArr) //Vergleiche die Mindesthöhe der vorherigen Zeile}
    }

5. Holen Sie sich die Position des Bildes mit der minimalen Höhe in der vorherigen Zeile

//Definiere eine getMinHeightLocation-Funktion, übergebe ihr alle Bilder in der vorherigen Zeile von BoxHeightArr und die Mindesthöhe der Bilder in der vorherigen Zeile von minHeight function getMinHeightLocation(BoxHeightArr, minHeight) {
    für (var i in BoxHeightArr) {
      if (BoxHeightArr[i] === minHeight) { //Wenn die Bildhöhe gleich der Mindesthöhe ist, ist die Position des Bildes die Position des Bildes mit der Mindesthöhe return i
      }
    }
  }

6. Abbildungen

    für (var i = 0; i < ccontent.length; i++) {
    wenn (i < Zahl) {
      BoxHeightArr[i] = ccontent[i].offsetHeight
    } anders {
      var minHeight = Math.min.apply(null, BoxHeightArr)
      var minIndex = getMinHeightLocation(BoxHeightArr, minHeight)
      ccontent[i].style.position = 'absolute' //Das einzufügende Bild absolut positionieren, d. h. die Position des Elements wird durch die Attribute „left“, „top“, „right“ und „bottom“ angegeben ccontent[i].style.top = minHeight + 'px' //Den Abstand des eingefügten Bildes nach oben genau so einstellen, wie die Höhe des darunter einzufügenden Bildes ccontent[i].style.left = ccontent[minIndex].offsetLeft + 'px' //Den Abstand des eingefügten Bildes nach ganz links genau so einstellen, wie den Abstand des darunter einzufügenden Bildes nach ganz links BoxHeightArr[minIndex] = BoxHeightArr[minIndex] + ccontent[i].offsetHeight //Nach dem Einfügen des Bildes muss die Höhe dieser Position auf die Summe der Höhen der beiden Bilder gesetzt werden}
  }

Der vollständige Code lautet wie folgt:

Code optimieren und Leistung verbessern

fenster.onload = funktion() {
  imgLocation('Container', 'Box') //Konstruktor imgLocation
}
//Verwende window.onload = function() {}, um die Funktion auszuführen, ohne auf den Aufruf auf der Hauptseite zu warten. //Ermitteln, wie viele Bilder aktuell platziert werden sollen. function imgLocation(parent, content) { //Lass parent='container', content='box'
  // Den gesamten Inhalt unter dem übergeordneten Element abrufen var cparent = document.getElementById(parent)
  var ccontent = getChildElemnt(cparent, Inhalt)
  var imgWidth = ccontent[0].offsetWidth
  var num = Math.floor(document.documentElement.clientWidth / imgWidth)
  cparent.style.cssText = „Breite: ${imgWidth * num} px“

  var BoxHeightArr = []
  für (var i = 0; i < ccontent.length; i++) {
    wenn (i < Zahl) {
      BoxHeightArr[i] = ccontent[i].offsetHeight
    } anders {
      var minHeight = Math.min.apply(null, BoxHeightArr)
      var minIndex = getMinHeightLocation(BoxHeightArr, minHeight)
      ccontent[i].style.position = "absolut"
      ccontent[i].style.top = minHeight + 'px'
      ccontent[i].style.left = ccontent[minIndex].offsetLeft + 'px'
      BoxHeightArr[minIndex] = BoxHeightArr[minIndex] + ccontent[i].offsetHeight
    }
  }
  // console.log(BoxHeightArr);
}


Funktion getChildElemnt(übergeordnetes Element, Inhalt) {übergeordnetes Element='Container', Inhalt='Box'
  const InhaltArr = []
  const allContent = parent.getElementsByTagName('*')
  console.log(alle Inhalte);
  für (var i = 0; i < allContent.length; i++) {
    wenn (allContent[i].className == content) {
      contentArr.push(alle Inhalte[i])
    }
  }
  Konsole.log(InhaltArr);
  InhaltArr zurückgeben
}

Funktion getMinHeightLocation(BoxHeightArr, minHeight) {
  für (var i in BoxHeightArr) {
    wenn (BoxHeightArr[i] === minHeight) {
      Rückkehr ich
    }
  }
}

Oben finden Sie Einzelheiten zur Verwendung von JS zur Implementierung des Wasserfall-Flusslayouts von Webseiten. Weitere Informationen zur Implementierung des Wasserfall-Flusslayouts von Webseiten mit JS finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • JS realisiert den Effekt des Bildwasserfallflusses
  • Verwenden von js, um einen Wasserfalleffekt zu erzielen
  • js realisiert das dynamische Laden von Daten durch Wasserfallfluss
  • js, um ein Wasserfall-Flusslayout zu erreichen (unendliches Laden)
  • 3 Möglichkeiten zum Implementieren eines Wasserfalllayouts mit JavaScript
  • Haben Sie gelernt, wie man einen JavaScript-Wasserfallfluss implementiert?

<<:  So verwenden Sie MySQL, um die Datengenerierung in Excel abzuschließen

>>:  Drei Möglichkeiten, um zu überprüfen, ob ein Port in einem Remote-Linux-System geöffnet ist

Artikel empfehlen

Sind die Wertebereiche von int(3) und int(10) in MySQL gleich?

Inhaltsverzeichnis Frage: Antwort: Wirklichkeit: ...

Docker erstellt CMS-On-Demand-System mit Player-Funktion

Inhaltsverzeichnis Text 1. Maschine vorbereiten 2...

Manuelles Implementieren des Eingabefelds für den js-SMS-Bestätigungscode

Vorwort Dieser Artikel beschreibt eine allgemeine...

Lösung für Tomcat zum externen Speichern von Konfigurationsdateien

Frage Wenn wir bei der normalen Entwicklung das P...

Einen Web-Rechner mit Javascript schreiben

Dieser Artikel beschreibt hauptsächlich die Auswi...

Detailliertes Tutorial zum Erstellen eines privaten Git-Servers unter Linux

1. Server-Setup Das Remote-Repository unterscheid...

Prozessdiagramm für die Ideenbereitstellung und Tomcat-Dienstimplementierung

Konfigurieren Sie zunächst die Projektartefakte K...

Detaillierte Analyse der MySQL-Sperrblockierung

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

Nginx Reverse Proxy Springboot JAR-Paket-Prozessanalyse

Die übliche Methode zum Bereitstellen eines Sprin...

Implementierung der Nginx-Konfiguration HTTPS-Sicherheitsauthentifizierung

1. Der Unterschied zwischen HTTP und HTTPS HTTP: ...

Zusammenfassung der Verwendung von MySQL Online DDL gh-ost

Hintergrund: Als DBA werden die meisten DDL-Änder...