const track = document.querySelector('.carousel__track'); const slides = Array.from(track.children); const nextButton = document.querySelector('.carousel__button--right'); const prevButton = document.querySelector('.carousel__button--left'); const dotsNav = document.querySelector('.carousel__nav'); const dots = Array.from(dotsNav.children); const slideWidth = slides[0].getBoundingClientRect().width; //set slides adjacent to one another const setSlidePosition = (slide, index) => { slide.style.left = slideWidth * index + 'px'; }; slides.forEach(setSlidePosition); //slide changer function const moveToSlide = (track, currentSlide, targetSlide) => { track.style.transform = 'translateX(-' + targetSlide.style.left + ')'; currentSlide.classList.remove('current-slide'); targetSlide.classList.add('current-slide'); } //change highlighted dot when slides change const updateDots = (currentDot, targetDot) => { currentDot.classList.remove('current-slide'); targetDot.classList.add('current-slide'); } //hides the arrows when you're at one end of the carousel const hideShowArrows = (slides, prevButton, nextButton, targetIndex) => { if (targetIndex === 0) { prevButton.classList.add('is-hidden'); nextButton.classList.remove('is-hidden'); } else if (targetIndex === slides.length - 1) { prevButton.classList.remove('is-hidden'); nextButton.classList.add('is-hidden'); } else { prevButton.classList.remove('is-hidden'); nextButton.classList.remove('is-hidden'); } } //prev slide button prevButton.addEventListener('click', e => { const currentSlide = track.querySelector('.current-slide'); const prevSlide = currentSlide.previousElementSibling; const currentDot = dotsNav.querySelector('.current-slide'); const prevDot = currentDot.previousElementSibling; const prevIndex = slides.findIndex(slide => slide === prevSlide); moveToSlide(track, currentSlide, prevSlide) updateDots(currentDot, prevDot) hideShowArrows (slides, prevButton, nextButton, prevIndex); }); //next slide button nextButton.addEventListener('click', e => { const currentSlide = track.querySelector('.current-slide'); const nextSlide = currentSlide.nextElementSibling; const currentDot = dotsNav.querySelector('.current-slide'); const nextDot = currentDot.nextElementSibling; const nextIndex = slides.findIndex(slide => slide === nextSlide); moveToSlide(track, currentSlide, nextSlide) updateDots(currentDot, nextDot) hideShowArrows (slides, prevButton, nextButton, nextIndex); }); //dot click for slide change dotsNav.addEventListener('click', e => { const targetDot = e.target.closest('a'); if (!targetDot) return; const currentSlide = track.querySelector('.current-slide'); const currentDot = dotsNav.querySelector('.current-slide'); const targetIndex = dots.findIndex(dot => dot === targetDot); const targetSlide = slides [targetIndex]; moveToSlide (track, currentSlide, targetSlide); updateDots (currentDot, targetDot); hideShowArrows (slides, prevButton, nextButton, targetIndex); });