diff --git a/Image Slider/images/1.jpg b/Image Slider/images/1.jpg new file mode 100644 index 0000000..9af38bd Binary files /dev/null and b/Image Slider/images/1.jpg differ diff --git a/Image Slider/images/2.jpg b/Image Slider/images/2.jpg new file mode 100644 index 0000000..311c49c Binary files /dev/null and b/Image Slider/images/2.jpg differ diff --git a/Image Slider/images/3.jpg b/Image Slider/images/3.jpg new file mode 100644 index 0000000..a93dfaa Binary files /dev/null and b/Image Slider/images/3.jpg differ diff --git a/Image Slider/index.html b/Image Slider/index.html new file mode 100644 index 0000000..f4494a1 --- /dev/null +++ b/Image Slider/index.html @@ -0,0 +1,34 @@ + + + + + + Image Slider + + + + + + diff --git a/Image Slider/index.js b/Image Slider/index.js new file mode 100644 index 0000000..634cd05 --- /dev/null +++ b/Image Slider/index.js @@ -0,0 +1,102 @@ +const slides = document.getElementsByClassName("carousel-item"); +let slidePosition = 0; +const totalSlides = slides.length; + +const navCircles = document.querySelector(".carousel-nav-circles"); +const navCircle1 = document.getElementById("carousel-nav-1"); +const navCircle2 = document.getElementById("carousel-nav-2"); +const navCircle3 = document.getElementById("carousel-nav-3"); + +document.getElementById("carousel-button-next").addEventListener("click", moveToNextSlide); +document.getElementById("carousel-button-prev").addEventListener("click", moveToPrevSlide); + +navCircles.addEventListener("click", (e) => { + e.preventDefault(); + + const navCirclePosition = e.target.id; + + removeNavCircleColors(navCircle1, navCircle2, navCircle3); + hideAllSlides(); + + switch (navCirclePosition) { + case "carousel-nav-1": + moveToSlide(0); + // displaySlidePosition(0); + navCircle1.classList.add("current-slide-position"); + break; + case "carousel-nav-2": + moveToSlide(1); + // displaySlidePosition(1); + navCircle2.classList.add("current-slide-position"); + break; + case "carousel-nav-3": + moveToSlide(2); + // displaySlidePosition(2); + navCircle3.classList.add("current-slide-position"); + break; + } +}); + +function moveToNextSlide() { + hideAllSlides(); + removeNavCircleColors(navCircle1, navCircle2, navCircle3); + + if (slidePosition === totalSlides - 1) { + slidePosition = 0; + } else { + slidePosition++; + } + slides[slidePosition].classList.add("carousel-item-visible"); + + displaySlidePosition(slidePosition); +} + +function moveToPrevSlide() { + hideAllSlides(); + removeNavCircleColors(navCircle1, navCircle2, navCircle3); + + if (slidePosition === 0) { + slidePosition = totalSlides - 1; + } else { + slidePosition--; + } + slides[slidePosition].classList.add("carousel-item-visible"); + + displaySlidePosition(slidePosition); +} + +function hideAllSlides() { + for (let slide of slides) { + slide.classList.remove("carousel-item-visible"); + slide.classList.add("carousel-item-hidden"); + } + return; +} + +function moveToSlide(slideNumber) { + return slides[slideNumber].classList.add("carousel-item-visible"); +} + +function displaySlidePosition(slideNumber) { + if (slideNumber === 0) { + return navCircle1.classList.add("current-slide-position"); + } + if (slideNumber === 1) { + return navCircle2.classList.add("current-slide-position"); + } + if (slideNumber === 2) { + return navCircle3.classList.add("current-slide-position"); + } +} + +function removeNavCircleColors(el1, el2, el3) { + el1.classList.remove("current-slide-position"); + el2.classList.remove("current-slide-position"); + el3.classList.remove("current-slide-position"); + return; +} + +function transitionEveryFiveSeconds() { + setInterval(moveToNextSlide, 5000); +} +transitionEveryFiveSeconds(); diff --git a/Image Slider/styles.css b/Image Slider/styles.css new file mode 100644 index 0000000..58dd2e7 --- /dev/null +++ b/Image Slider/styles.css @@ -0,0 +1,103 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + padding: 1em; +} + +.carousel { + max-width: 1000px; + position: relative; +} + +.carousel-item, +.carousel-item-hidden { + display: none; +} + +.carousel-item img { + width: 100%; + height: auto; + object-fit: cover; +} + +.carousel-item-visible { + display: block; + animation: fadeVisibility 1.3s; +} + +.carousel-actions { + display: flex; + width: 100%; + justify-content: space-between; + position: absolute; + top: 50%; + transform: translateY(-50%); +} + +button { + background-color: grey; + color: white; + border-radius: 25px; + border: 0; + cursor: pointer; + width: 40px; + height: 40px; + font-weight: 900; + font-size: 2rem; + line-height: 2rem; + font-family: "Trebuchet MS", "Lucida Sans Unicode", "Lucida Grande", "Lucida Sans", Arial, sans-serif; +} + +button:hover, +button:focus { + background-color: yellowgreen; + color: black; +} + +#carousel-button-prev { + margin-left: 0.5em; +} + +#carousel-button-next { + margin-right: 0.5em; +} + +.carousel-nav-circles { + display: flex; + width: 100%; + justify-content: center; + position: absolute; + bottom: 2%; +} + +.carousel-nav-btn { + background-color: white; + width: 15px; + height: 15px; + margin: 0 4px; +} + +.carousel-nav-btn:hover { + background-color: hotpink; +} + +.current-slide-position { + background-color: yellowgreen; +} + +@keyframes fadeVisibility { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +}