티스토리 뷰

 

	const sliderWrap = document.querySelector(".slider__wrap");
        const sliderImg = document.querySelector(".slider__img");       
        const sliderInner = document.querySelector(".slider__inner");   
        const slider = document.querySelectorAll(".slider");           
        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 slideFirst = slider[0];                    //첫 번째 이미지
        let slideLast = slider[sliderLength - 1];      //마지막 이미지
        let cloneFirst = slideFirst.cloneNode(true);   //첫 번째 이미지 복사
        let cloneLast = slideLast.cloneNode(true);     //마지막 이미지 복사  제이쿼리 = clone 메소드
        let posInitial ="";
        let dotIndex = "";

        //이미지 복사 appendTo//prependYo // append//prepend
        sliderInner.appendChild(cloneFirst);
        sliderInner.insertBefore(cloneLast, slideFirst);

        
  
        //이미지 움직이기
        function gotoSlider(direction) {
            sliderInner.classList.add("transition");
            posInitial = sliderInner.offsetLeft;
            console.log(posInitial);

            //오른쪽 버튼
            if(direction == 1){
                //left = -800px
               sliderInner.style.left = (posInitial - sliderWidth) + "px";
               currentIndex++;
            }
            //왼쪽 버튼
            if(direction == -1){
               sliderInner.style.left = (posInitial + sliderWidth) + "px";
               currentIndex--;
            }
            dotActive();
        }   

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

        //닷 버튼 활성화
        function dotActive(){
            let dotAll = document.querySelectorAll(".slider__dot .dot");
            dotAll.forEach(dot => {     //전체 닷 메뉴 비활성화
                dot.classList.remove("active");
            });

            //마지막 이미지 왔을 때
            if(currentIndex == sliderLength){   
                dotAll[0].classList.add("active");
            } else if (currentIndex == -1){            
                dotAll[sliderLength -1].classList.add("active");//처음 이미지 왔을 때
            } else {
            //현재 보고 있는 이미지 닷 활성화
                dotAll[currentIndex].classList.add("active");
            }
        }

        //애니메이션 완료 후
        function checkIndex(){
            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;
            }
        }

        //버튼 클릭하기
        sliderBtnPrev.addEventListener("click", ()=>{gotoSlider(-1)});
        sliderBtnNext.addEventListener("click", ()=>{gotoSlider(1)});
        sliderInner.addEventListener("transitionend", checkIndex);

        dotInit();

이미지 슬라이드 사이트입니다.

왼쪽버튼 오른쪽 버튼을 이용하여 이미지를 움직일수 있습니다.

또한 이미지가 움직일때 닷버튼이 그 순번에 맞춰 색이 변합니다!!

 

참조사이트

https://parkjongho1.github.io/webs_ho/javascript/effect/sliderEffect07.html

 

슬라이드 이펙트7

이미지 슬라이드 - 무한, 버튼 추가, 닷 버튼 추가

parkjongho1.github.io

 

반응형
댓글
© 2022 babydevelop