class Lightbox { constructor(lightboxElement) { this.lightbox = lightboxElement; this.closeButton = this.lightbox.querySelector(".lightbox__close"); this.prevButton = this.lightbox.querySelector(".lightbox__prev"); this.nextButton = this.lightbox.querySelector(".lightbox__next"); this.gallery = this.lightbox.previousElementSibling; this.currentPictureIndex = 0; if (this.gallery) { this.pictures = this.gallery.querySelectorAll("img.lightbox-gallery__picture"); this.lightboxTriggers = this.gallery.querySelectorAll(".lightbox-gallery__trigger"); this.init(); } } init() { this.lightboxTriggers.forEach((button, index) => { button.addEventListener("click", () => { this.showLightbox(); this.setCurrentPicture(this.pictures[index]); this.setCurrentPictureIndex(index); }); }); this.closeButton.addEventListener("click", () => { this.hideLightbox(); }); this.prevButton.addEventListener("click", () => { this.showPreviousPicture(); }); this.nextButton.addEventListener("click", () => { this.showNextPicture(); }); document.addEventListener("keydown", (event) => { if (event.key === "Escape") { this.hideLightbox(); } if (event.key === "ArrowLeft") { this.showPreviousPicture(); } if (event.key === "ArrowRight") { this.showNextPicture(); } }); } showLightbox() { this.lightbox.classList.remove("lightbox--inactive"); this.lightbox.classList.add("lightbox--active"); this.closeButton.focus(); this.lightbox.setAttribute("aria-hidden", "false"); } hideLightbox() { this.lightbox.classList.remove("lightbox--active"); this.lightbox.classList.add("lightbox--inactive"); this.lightbox.setAttribute("aria-hidden", "true"); // this.lightboxTriggers[this.currentPictureIndex].focus(); } setCurrentPicture(picture) { const viewedPicture = this.lightbox.querySelector(".lightbox__current-picture img"); const viewedDescription = this.lightbox.querySelector(".lightbox__current-picture-description"); viewedPicture.src = picture.src; viewedPicture.alt = picture.alt; const imageDescription = [picture.dataset.description, picture.dataset.caption].filter(Boolean); viewedDescription.textContent = imageDescription.join(" — "); } setCurrentPictureIndex(index) { this.currentPictureIndex = index; } showPreviousPicture() { if (this.currentPictureIndex > 0) { this.currentPictureIndex--; } else { this.currentPictureIndex = this.pictures.length - 1; } this.setCurrentPicture(this.pictures[this.currentPictureIndex]); } showNextPicture() { if (this.currentPictureIndex < this.pictures.length - 1) { this.currentPictureIndex++; } else { this.currentPictureIndex = 0; } this.setCurrentPicture(this.pictures[this.currentPictureIndex]); } } document.addEventListener("DOMContentLoaded", () => { const lightboxes = document.querySelectorAll(".lightbox"); lightboxes.forEach((lightboxElement) => { new Lightbox(lightboxElement); }); });