Fotogalerie mit Lightbox – Tutorial für Einsteiger

Fotogalerie mit Lightbox – Tutorial für Einsteiger 2026-03-13

Live-Demo auf rainpearl.de

Was wir bauen​

Diese Galerie besteht aus drei Dateien: `gallery.html` (die Struktur), `gallery.css` (das Aussehen) und `gallery.js` (die Funktionalität). In diesem Tutorial konzentrieren wir uns auf das Zusammenspiel von HTML und JavaScript – denn genau dort passiert das Hauptgeschehen. Das Prinzip ist einfach: Bilder werden in einem Grid angezeigt, und per Klick öffnet sich eine sogenannte Lightbox, die das Bild groß präsentiert. CSS lassen wir hier bewusst außen vor.
---
Das HTML: Struktur und Vorbereitung
Der HTML-Teil legt den Grundstein. Jedes Bild steckt in einem `<div class="grid-item">`, das beim Klick die JavaScript-Funktion `openLightbox()` aufruft – mit einer Zahl als Parameter, die angibt, welches Bild geöffnet werden soll.
HTML:
<div class="grid-item" onclick="openLightbox(1)">
    <img src="bilder/Bild01.jpeg" alt="Bild 1" />
</div>
Das `onclick`-Attribut ist der direkte Draht zu JavaScript: Sobald jemand auf dieses `<div>` klickt, wird `openLightbox(1)` ausgeführt. Weiter unten im HTML befindet sich die Lightbox selbst – zunächst unsichtbar, aber bereit:
HTML:
<div id="lightbox" class="lightbox">
    <span class="lightbox-close" onclick="closeLightbox()">&times;</span>
    <button class="lightbox-nav lightbox-prev" onclick="changeLightboxImage(-1)">&#8249;</button>
    <button class="lightbox-nav lightbox-next" onclick="changeLightboxImage(1)">&#8250;</button>
    <div class="lightbox-content">
        <img id="lightbox-image" src="" alt="" />
    </div>
    <div class="lightbox-counter">
        <span id="lightbox-current">1</span>
        /
        <span id="lightbox-total">9</span>
    </div>
</div>
Die Lightbox hat eine eindeutige `id="lightbox"`, damit JavaScript sie später gezielt ansprechen kann. Das Bild darin (`id="lightbox-image"`) hat zunächst kein `src` – das wird erst beim Öffnen gesetzt.
---

JavaScript: Bildpfade einsammeln​

Bevor irgendwas funktioniert, muss JavaScript wissen, wo alle Bilder liegen. Das erledigt die Funktion `collectImagePaths()`, die beim Laden der Seite automatisch ausgeführt wird:
Javascript:
function collectImagePaths() {
    const gridItems = document.querySelectorAll('.grid-item img');
    imagePaths = Array.from(gridItems).map((img) => img.src);
}
`querySelectorAll('.grid-item img')` sucht alle `<img>`-Elemente innerhalb von Elementen mit der Klasse `grid-item`. Das Ergebnis ist eine NodeList, die mit `Array.from()` in ein richtiges Array umgewandelt wird. Danach holt `.map(img => img.src)` aus jedem Bild-Element nur den Pfad heraus. Am Ende enthält `imagePaths` ein Array wie `["bilder/Bild01.jpeg", "bilder/Bild02.jpeg", ...]`. Dieses Array ist der gemeinsame Speicher für alle anderen Funktionen.
---

JavaScript: Die Lightbox öffnen​

Wenn jemand auf ein Bild klickt, wird `openLightbox(imageNumber)` aufgerufen:
Javascript:
function openLightbox(imageNumber) {
    const lightbox = document.getElementById('lightbox');
    const lightboxImage = document.getElementById('lightbox-image');
    const currentCounter = document.getElementById('lightbox-current');
    currentLightboxIndex = imageNumber;

    lightboxImage.src = imagePaths[imageNumber - 1];
    currentCounter.textContent = imageNumber;

    lightbox.classList.add('active');

    document.body.style.overflow = 'hidden';
}
Hier passieren mehrere Dinge auf einmal. `document.getElementById()` holt sich die HTML-Elemente über ihre `id`. Dann wird `lightboxImage.src` auf den passenden Bildpfad gesetzt – `imageNumber - 1`, weil Arrays in JavaScript bei 0 beginnen (Bild 1 liegt also an Index 0). Mit `classList.add('active')` bekommt die Lightbox eine CSS-Klasse, die sie sichtbar macht. Und `document.body.style.overflow = 'hidden'` verhindert, dass die Seite im Hintergrund scrollt, solange die Lightbox offen ist.
---

JavaScript: Blättern und Schließen​

Das Weiterblättern übernimmt `changeLightboxImage(direction)`. Der Parameter ist entweder `1` (vorwärts) oder `-1` (rückwärts):
Javascript:
function changeLightboxImage(direction) {
    const lightboxImage = document.getElementById('lightbox-image');
    const currentCounter = document.getElementById('lightbox-current');
    currentLightboxIndex += direction;

    if (currentLightboxIndex > imagePaths.length) {
        currentLightboxIndex = 1;
    }

    if (currentLightboxIndex < 1) {
        currentLightboxIndex = imagePaths.length;
    }

    lightboxImage.src = imagePaths[currentLightboxIndex - 1];
    currentCounter.textContent = currentLightboxIndex;
}
Die zwei `if`-Abfragen sorgen für den Wraparound: Wer am letzten Bild weiterkllickt, landet wieder beim ersten – und umgekehrt. Das Schließen mit `closeLightbox()` ist das Gegenteil von `openLightbox()`: Die Klasse `active` wird entfernt, und `overflow` wird wieder auf `auto` gesetzt.
---

JavaScript: Tastatursteuerung und DOMContentLoaded​

Damit die Galerie auch mit der Tastatur bedienbar ist, lauscht JavaScript auf Tastendrücke:
Javascript:
document.addEventListener('keydown', function (event) {
    const lightbox = document.getElementById('lightbox');
    if (lightbox && lightbox.classList.contains('active')) {
        if (event.key === 'ArrowLeft') {
            changeLightboxImage(-1);
        } else if (event.key === 'ArrowRight') {
            changeLightboxImage(1);
        } else if (event.key === 'Escape') {
            closeLightbox();
        }
    }
});
`addEventListener('keydown', ...)` registriert eine Funktion, die bei jedem Tastendruck ausgeführt wird. Die Abfrage `lightbox.classList.contains('active')` stellt sicher, dass die Tastatursteuerung nur aktiv ist, wenn die Lightbox wirklich offen ist. Alles startet dann sauber im `DOMContentLoaded`-Event – das bedeutet: JavaScript wartet, bis das HTML vollständig geladen ist, bevor es `collectImagePaths()` ausführt und den Klick-auf-Hintergrund-Listener einrichtet. Würde man das weglassen, könnte es passieren, dass JavaScript nach Elementen sucht, die noch gar nicht existieren.
---

Zusammenfassung: Das Zusammenspiel​

Das Grundprinzip dieser Galerie ist elegant einfach: HTML legt die Struktur fest und ruft beim Klick JavaScript-Funktionen auf. JavaScript speichert alle Bildpfade in einem Array, manipuliert dann gezielt einzelne HTML-Elemente (per `id`) und schaltet CSS-Klassen, um die Lightbox sichtbar oder unsichtbar zu machen. Wer die Galerie erweitern möchte, fügt einfach weitere `<div class="grid-item">` im HTML hinzu – `collectImagePaths()` findet sie automatisch, und der Counter passt sich von selbst an.

Live-Demo auf rainpearl.de
Autor
Rainchiller
Downloads
97
Aufrufe
265
Erstellt am
Letzte Bearbeitung
Bewertung
0,00 Stern(e) 0 Bewertung(en)
Zurück
Oben Unten