In diesem Tutorial verwenden wir slick.js, ein beliebtes jQuery-Plugin, um eine attraktive responsive Bildergalerie zu erstellen. Hier ist die Galerie, die wir erstellen werden:
Vergewissern Sie sich, dass Sie die Vollbildversion überprüfen und die Größe Ihres Browserfensters ändern, um zu sehen, wie sich das Layout je nach Größe des Darstellungsbereichs ändert.
Slick.js ist ein bekanntes, von Ken Wheeler erstelltes jQuery-Plugin, mit dem Sie schöne responsive Karussells erstellen können. Um besser zu verstehen, was Ihnen dieses Plugin bieten kann, lesen Sie die Dokumentation.
Glücklicherweise funktioniert es nicht nur in allen modernen Browsern, sondern auch in älteren Browsern wie dem IE 8+.
Zum Schluss möchten Sie vielleicht noch die WordPress-Version anschauen.
Um mit Slick zu beginnen, laden Sie zunächst folgende Dateien in Ihr Projekt herunter und installieren Sie sie:
slick.css
oder seine reduzierte Versionslick.js
oder seine reduzierte VersionOptional möchten Sie möglicherweise das importieren Slick-theme.css
Datei.
Sie können eine Kopie der entsprechenden Slick-Dateien abrufen, indem Sie das Github-Repo besuchen, einen Paket-Manager (z. B. npm) verwenden oder die erforderlichen Assets über ein CDN (z. B. cdnjs) laden. Für dieses Tutorial wähle ich die letzte Option.
Außerdem habe ich Babel integriert, um den ES6-Code auf ES5 und Lodash zu kompilieren, um dessen Vorteil zu nutzen entprellen
Funktion (wir werden das später verwenden).
In diesem Sinne, wenn Sie unter die schauen die Einstellungen In unserem Demo-Stift sehen Sie, dass ich eine externe CSS-Datei und drei externe JavaScript-Dateien enthalten habe.
An dieser Stelle ist es wichtig, die Struktur unserer Seite zu verstehen. Am wichtigsten ist, dass wir zwei Karussells definieren, die genau dieselben Bilder haben und synchronisiert sind (wir werden später besprechen, wie dies geht). Die Bildmaße betragen 860 x 550 Pixel. In Ihren eigenen Projekten können diese jedoch abweichen.
Als Teil des zweiten Karussells geben wir schließlich die Navigationspfeile sowie ein Element an, das die Gesamtzahl der Folien festhält.
Hier ist die erforderliche Struktur für unsere Demoseite:
Karussell lädt…
Insgesamt sollte unsere Galerie, abhängig vom verfügbaren Ansichtsfenster, vier verschiedene Erscheinungsbilder haben. Lassen Sie uns sie visualisieren, indem Sie einen Mobile-First-Ansatz verfolgen.
Wenn das Browserfenster weniger als 480 Pixel beträgt, sollte es so aussehen, wobei nur das zweite Karussell und die Navigation angezeigt werden:
Karussell-Layout auf extra kleinen BildschirmenAuf Bildschirmen zwischen 480px und 768px sollte dies wie folgt aussehen, wobei sich zwei Miniaturansichten unter der Hauptfolie befinden:
Karussell-Layout auf kleinen BildschirmenAls Nächstes wird auf Bildschirmen zwischen 769px und 1023px ein drittes Miniaturbild eingeführt:
Karussell-Layout auf mittleren BildschirmenAuf großen Bildschirmen (≥ 1024px) sollte es schließlich wie folgt aussehen, wobei die Miniaturansichten auf der Seite angezeigt werden (beachten Sie, dass sie nicht vollständig auf dieses Bild passen):
Karussell-Layout auf großen BildschirmenAlle oben genannten Fälle werden in den unten gezeigten Medienabfragen berücksichtigt:
.Synchronkarussells position: relative; Anzeige: Flex; Flex-Wrap: Wrap; Begründungsinhalt: Leerzeichen; .synch-carousels> * width: 100%; .synch-carousels .right order: -1; .synch-carousels .left overflow: hidden; .synch-carousels .gallery display: none; .synch-carousels .gallery .slick-list height: auto! important; Marge: 0 -20px; .synch-carousels .gallery .slick-slide margin: 0 20px; @media screen und (min-width: 480px) .synch-carousels .right margin-bottom: 20px; .synch-carousels .gallery display: block; @media screen und (min-width: 1024px) .synch-carousels .right position: relative; Breite: berechnet (100% - 230px); Rand unten: 0; Reihenfolge: 2; .synch-carousels.left width: 210px; .synch-carousels .gallery .slick-slide margin: 0 0 20px 0; .synch-carousels .gallery .slick-list margin: 0;
Beachten Sie, dass es eine gibt !wichtig
Regel. Dadurch wird ein Inline-Slick-Stil überschrieben.
Wenden wir uns nun den JavaScript-bezogenen Dingen zu.
Wenn das DOM fertig ist, zwischenspeichern wir einige häufig verwendete Selektoren:
const $ left = $ (". left"); const $ gl = $ (". gallery"); const $ gl2 = $ (". gallery2"); const $ photosCounterFirstSpan = $ (". photos-counter span: nth-child (1)");
Dann initialisieren und synchronisieren wir unsere beiden Karussells. Der für dieses Verhalten verantwortliche Code lautet wie folgt:
$ gl.slick (Zeilen: 0, SlidesToShow: 2, Pfeile: false, ziehbar: false, useTransform: false, mobileFirst: true, responsive: [breakpoint: 768), Einstellungen: slidesToShow: 3, breakpoint: 1023, Einstellungen: slidesToShow: 1, vertical: true]); $ gl2.slick (Zeilen: 0, useTransform: false, prevArrow: ".arrow-left", nextArrow: ".arrow-right", fade: true, asNavFor: $ gl);
Ohne Zweifel ist der beste Weg, um zu verstehen, wie dieser Code funktioniert, die schlanke Dokumentation zu lesen. Lassen Sie mich jedoch zwei wichtige Dinge erklären:
asNavFor
Konfigurationsoption erlaubt es uns, die Karussells zu synchronisieren und eines als Navigation für das andere zu verwenden.useTransform: false
. Dies liegt daran, dass sie in der ersten Folie des ersten Karussells auf großen Bildschirmen ein kleines Flimmern verursachen (wir hätten sie nur für das erste Karussell deaktivieren können).Unsere Galerie sollte nur sichtbar sein, wenn alle Seitenelemente fertig sind. Zunächst erscheint ein optionaler Preloader, der sich erneut auf das Markup bezieht. Es sieht folgendermaßen aus:
Karussell lädt…
An dieser Stelle müssen wir noch einmal auf großen Bildschirmen über das gewünschte Galerie-Layout nachdenken. Wenn Sie sich die entsprechenden Screenshots ansehen, werden Sie feststellen, dass beide Karussells die gleiche Höhe haben. Um dieses gewünschte Verhalten zu erreichen, müssen wir benutzerdefinierten JavaScript-Code schreiben (über CSS hinaus). Dieser Code setzt die Höhe des ersten Karussells dynamisch auf die Höhe des zweiten (oder umgekehrt)..
Wenn Sie die oben genannten Anforderungen kennen, wird der Code ausgeführt, wenn die gesamte Seite fertig ist:
$ (window) .on ("load", () => handleCarouselsHeight (); setTimeout (() => $ (". loading"). fadeOut (); $ ("body"). addClass ("vorbei.) -visible ");, 300););
Und hier ist die Erklärung des handleCarouselsHöhe
Funktion:
function handleCarouselsHeight () if (window.matchMedia ("(min-width: 1024px)"). passt) const gl2H = $ (". gallery2)"). height (); $ left.css ("height", gl2H); else $ left.css ("height", "auto");
Wenn die Seite geladen wird, funktioniert die Galerie einwandfrei. Es sollte jedoch auch wie erwartet funktionieren, wenn die Größe des Browserfensters geändert wird.
Der Code, der sich mit dieser speziellen Situation befasst, wird unten gezeigt:
$ (window) .on ("resize", _.debounce (()) => handleCarouselsHeight ();, 200));
Beachten Sie, dass der Ereignishandler in ein eingeschlossen ist entprellen
Funktion. Diese Lodash-Funktion hilft uns dabei, die Anzahl der Aufrufe dieses Handlers zu beschränken.
Nachdem wir die Hauptfunktionalität unserer Galerie erfolgreich implementiert haben, gehen wir einen Schritt weiter und bauen ein paar optionale Elemente auf.
Zuerst zeigen wir in der oberen rechten Ecke des zweiten Karussells die aktuelle Folie und die Gesamtanzahl der Folien an.
Anzeige der aktuellen Folie und der Gesamtzahl der FolienUm dies zu erreichen, nutzen wir die drin
und Nach der veränderung
glatte Ereignisse.
Hier ist der zugehörige Code:
/ * Sie müssen das init-Ereignis vor der Initialisierung von Slick binden (siehe Demo). * / gl2.on ("init", (event, slick) => $ photosCounterFirstSpan.text ('$ slick.currentSlide + 1 /') ; $ (". photo-counter span: nth-child (2)"). text (slick.slideCount);); $ gl2.on ("afterChange", (event, slick, currentSlide) => $ photosCounterFirstSpan.text ('$ slick.currentSlide + 1 /'););
Als weitere Verbesserung sollte jedes Mal, wenn wir auf eine Rutsche des ersten Karussells klicken, die zugehörige Rutsche des zweiten Karussells aktiv sein. Danke an Slicks slickGoTo
So können wir diese Funktionalität entwickeln.
Hier ist der zugehörige Code:
$ (". gallery .item"). on ("click", function () const index = $ (this) .attr ("data-slick-index"); $ gl2.slick ("slickGoTo", index) ;);
Die Demo sollte in allen aktuellen Browsern gut funktionieren und Sie können sie in Ihren Projekten sicher verwenden.
Beim Testen der Demo auf großen Bildschirmen ist in einigen Browsern (Firefox, Edge) nur ein kleiner Fehler aufgetreten. Wenn Sie auf die Navigationspfeile klicken, erreichen alle Folien des ersten Karussells außer dem ersten nicht die Oberkante des übergeordneten Elements und hinterlassen eine einzelne Pixellücke:
Slick ist ein Pixel-Fehler in einigen BrowsernNicht zuletzt sind möglicherweise kleine Verbesserungen und Anpassungen erforderlich, da die Größe des Fensters je nach Ihren Anforderungen geändert wird.
In diesem Tutorial haben wir slick.js genutzt und eine wunderschöne responsive Galerie erstellt. Hoffentlich können Sie diese Implementierung jetzt in Ihren eigenen Projekten ausprobieren. In diesem Fall können Sie Ihren Projektlink in den Kommentaren weitergeben!