diff --git a/src/scripts.js b/src/scripts.js index 5bce8ec..f8f65ab 100644 --- a/src/scripts.js +++ b/src/scripts.js @@ -1,3 +1,54 @@ +const images = Array.from(document.querySelectorAll(".image")); +let currentImageIndex = 0; + +function addImageToModal(imageIndex) { + modalImage.src = images[imageIndex].src; +} + +function handleNavigationButtonsState() { + prevBtn.disabled = currentImageIndex === 0; + nextBtn.disabled = currentImageIndex === images.length - 1; +} + +function activateImageModal() { + images.forEach((element) => { + element.addEventListener("click", (e) => { + modalImage.src = e.target.src; + modal.classList.remove("hidden"); + currentImageIndex = images.indexOf(element); + }); + }); +} + +function addInteractivityPreviousButton() { + prevBtn.addEventListener("click", (e) => { + currentImageIndex = currentImageIndex === 0 ? 0 : currentImageIndex - 1; + handleNavigationButtonsState(); + addImageToModal(currentImageIndex); + }); +} + +function addInteractivityNextButton() { + nextBtn.addEventListener("click", (e) => { + currentImageIndex = + currentImageIndex === images.length + ? images.length + : currentImageIndex + 1; + handleNavigationButtonsState(); + addImageToModal(currentImageIndex); + }); +} + +function activateModalClose() { + closeBtn.addEventListener("click", (e) => { + modal.classList.add("hidden"); + }); + + window.addEventListener("click", (event) => { + return event.target === modal ? modal.classList.add("hidden") : null; + }); +} + document.addEventListener("DOMContentLoaded", () => { const modal = document.getElementById("modal"); const modalImage = document.getElementById("modalImage"); @@ -5,17 +56,8 @@ document.addEventListener("DOMContentLoaded", () => { const prevBtn = document.getElementById("prevBtn"); const nextBtn = document.getElementById("nextBtn"); - const images = Array.from(document.querySelectorAll(".image")); - let currentImageIndex = 0; - - // TODO: (Issue #1) Add an event listener for each image in the gallery to show it in the modal when clicked - - // TODO: (Issue #2) Add event listeners for the prevBtn and nextBtn for modal navigation functionality - // Clean Code Hint: Issue #1 and #2 both deal with updating the modal image based on currentImageIndex. Consider creating a function to handle this functionality. - - // TODO: (Issue #3) Add an event listener for the closeBtn to close the modal - - // TODO: (Issue #3) Add an event listener to close the modal when clicking the modal background - - // TODO: (Issue #4) Create a function to update the state of the navigation buttons based on currentImageIndex + activateImageModal(); + addInteractivityPreviousButton(); + addInteractivityNextButton(); + activateModalClose(); });