티스토리 뷰

https://garenchoi.github.io/webs_class/javascript/effect/sliderEffect08.html

const sliderWrap = document.querySelector(".slider__wrap");
        const sliderImg = document.querySelector(".slider__img");       //이미지 보이는 영역
        const sliderInner = document.querySelector(".slider__inner");   //이미지 움직이는 영역
        const slider = document.querySelectorAll(".slider");            //5개의 이미지 저장
        const sliderBtn = document.querySelector(".slider__btn");
        const sliderBtnPrev = sliderBtn.querySelector(".prev");
        const sliderBtnNext = sliderBtn.querySelector(".next");
        const sliderDot = document.querySelector(".slider__dot");

        let currentIndex = 0;
        let sliderWidth = sliderImg.offsetWidth;    //이미지 가로 값
        let sliderLength = slider.length;   //이미지 갯수
        let sliderFirst = slider[0];    //첫 번째 이미지
        let sliderLast = slider[sliderLength - 1];    //마지막 이미지
        let cloneFirst = sliderFirst.cloneNode(true);   //첫 번째 이미지 복사
        let cloneLast = sliderLast.cloneNode(true);   //첫 번째 이미지 복사
        let posInitial = "";
        let dotIndex = "";
        let sliderTimer = "";
        let interval = 1000;

        //이미지 복사 appendTo/prependTo : append/prepend
        sliderInner.appendChild(cloneFirst);
        sliderInner.insertBefore(cloneLast, sliderFirst);

        function gotoSlider(index){
            sliderInner.classList.add("transition");
            sliderInner.style.left = -sliderWidth * (index+1)+"px";

            currentIndex = index;
        };

        sliderBtnPrev.addEventListener("click", () => {
            let prevIndex = currentIndex - 1;
            gotoSlider(prevIndex);
        });
        
        sliderBtnNext.addEventListener("click", () => {
            let nextIndex = currentIndex + 1;
            gotoSlider(nextIndex);
        });

        function dotInit(){
            for(let i=0; i<sliderLength; i++){
                dotIndex += "<a href='#' class='dot'></a>";
            }
            dotIndex += "<a href='#' class='play'>play</a>";
            dotIndex += "<a href='#' class='stop show'>stop</a>";
            sliderDot.innerHTML = dotIndex;
            sliderDot.firstElementChild.classList.add("active");
        }
        dotInit();

        function autoPlay(){
            sliderTimer = setInterval(() => { 
                gotoSlider(currentIndex + 1);
            }, interval)
        }   
        autoPlay();

        function stopPlay(){
            clearInterval(sliderTimer);
        }

        sliderInner.addEventListener("transitionend", () => {
            sliderInner.classList.remove("transition");
            
            if(currentIndex == -1){
                sliderInner.style.left = -(sliderLength * sliderWidth) + "px";
                currentIndex = sliderLength -1;
            }
            if(currentIndex == sliderLength){
                sliderInner.style.left = -(1 * sliderWidth) + "px";
                currentIndex = 0;
            }
        });

        sliderInner.addEventListener("mouseenter", () => {
            stopPlay();
        })
        sliderInner.addEventListener("mouseleave", () => {
            let stopClass = document.querySelector(".stop").classList.contains("show");
            if(stopClass){
                autoPlay();
            }
        })

        document.querySelector(".play").addEventListener("click", () => {
            document.querySelector(".play").classList.remove("show");
            document.querySelector(".stop").classList.add("show");
            autoPlay()
        })

        document.querySelector(".stop").addEventListener("click", () => {
            document.querySelector(".stop").classList.remove("show");
            document.querySelector(".play").classList.add("show");
            stopPlay();
        })
댓글
© 2018 webstoryboy