Bagaimana cara kerjanya
Kami akan meningkatkan galeri dari Level 1: mengklik foto kecil akan membuka versi besar foto tersebut di seluruh halaman dengan latar belakang gelap (ini disebut lightbox). Mengklik lagi akan menutupnya.
Tunjukkan pada saya: lightbox
HTML – tambahkan “jendela zoom” di bawah galeri (awalnya tersembunyi):
<div class="gallery">
<img src="images/p1.jpg" alt="First photo">
<img src="images/p2.jpg" alt="Second photo">
<img src="images/p3.jpg" alt="Third photo">
</div>
<div id="lightbox" class="hidden">
<img id="lightbox-photo" src="" alt="">
</div>
CSS – jendela yang menutupi seluruh layar:
#lightbox {
position: fixed; /* stuck over the whole window */
inset: 0; /* 0 from every edge = the whole area */
background-color: rgba(0, 0, 0, 0.85);
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
#lightbox img {
max-width: 90%;
max-height: 90%;
}
.hidden {
display: none !important; /* hide completely */
}
JavaScript – dan sekarang sesuatu yang baru: kami bekerja dengan semua foto sekaligus:
const photos = document.querySelectorAll(".gallery img");
const lightbox = document.getElementById("lightbox");
const lightboxPhoto = document.getElementById("lightbox-photo");
// For every photo in the gallery: show it big on click
photos.forEach((photo) => {
photo.addEventListener("click", () => {
lightboxPhoto.src = photo.src;
lightboxPhoto.alt = photo.alt;
lightbox.classList.remove("hidden");
});
});
// Clicking anywhere in the lightbox closes it
lightbox.addEventListener("click", () => {
lightbox.classList.add("hidden");
});
Barang baru:
querySelectorAll(".gallery img")– temukan semua elemen yang cocok dengan pemilih CSS (sintaksnya sama seperti di CSS!). Mengembalikan daftar.forEach((photo) => { ... })– “lakukan ini untuk setiap item dalam daftar.” Sebuah loop – blok bangunan dasar pemrograman lainnya.photo.src– alamat gambar. Kami menyalinnya dari foto kecil ke foto besar.
Giliran kamu 💪
- Tambahkan lightbox ke situs web kamu dengan mengikuti contoh. kamu sudah memiliki galeri dari Level 1 – pastikan saja pemilihnya (
.gallery img) cocok dengan kelas kamu. - Peningkatan bagi yang berani – menavigasi dengan panah:
Perpanjangan skrip – kami mengingat foto mana yang sedang dibuka:
const photos = document.querySelectorAll(".gallery img");
const lightbox = document.getElementById("lightbox");
const lightboxPhoto = document.getElementById("lightbox-photo");
let current = 0;
function showPhoto(number) {
// Handle wraparound: after the last photo comes the first again
if (number < 0) number = photos.length - 1;
if (number >= photos.length) number = 0;
current = number;
lightboxPhoto.src = photos[current].src;
lightboxPhoto.alt = photos[current].alt;
}
photos.forEach((photo, index) => {
photo.addEventListener("click", () => {
showPhoto(index);
lightbox.classList.remove("hidden");
});
});
lightbox.addEventListener("click", () => {
lightbox.classList.add("hidden");
});
// Navigate with the keyboard
document.addEventListener("keydown", (event) => {
if (lightbox.classList.contains("hidden")) return;
if (event.key === "ArrowRight") showPhoto(current + 1);
if (event.key === "ArrowLeft") showPhoto(current - 1);
if (event.key === "Escape") lightbox.classList.add("hidden");
});
Dua hal baru lainnya: function showPhoto(number) {...} adalah fungsi bernama – paket kode yang dapat kamu jalankan dari mana saja berdasarkan namanya. Dan photos[current] mengeluarkan item dari daftar berdasarkan posisinya (penghitungan dimulai dari nol!).
Ide proyek: 🏫 foto dari acara sekolah · 🙋 kreasi dan petualanganmu · 🌍 foto dari perjalanan (di sinilah lightbox benar-benar bersinar!) · ⚽ momen dari pertandingan.
Periksa diri kamu: kamu mengeklik foto → foto tersebut tumbuh dengan latar belakang gelap. kamu klik lagi → ditutup. Dengan bonusnya, kamu juga dapat menavigasi dengan panah dan menutupnya dengan Escape. Beginilah cara kerja galeri di situs web profesional – dan sekarang kamu tahu apa yang ada di dalamnya.
Apa yang bisa diambil dari pelajaran ini
querySelectorAll()menemukan semua elemen yang cocok dengan pemilih CSS,forEachmenelusurinya satu per satu.- Lightbox =
<div>tersembunyi yang menutupi seluruh halaman (posisi: tetap; inset: 0) + mengaktifkan kelastersembunyi. - Fungsi
nama fungsi() {...}adalah paket kode yang diberi nama dan dapat digunakan kembali.
© 2026 Ing. Martin Polak / AlgoRhino · Ketentuan penggunaan konten