JAVASCRIPT/자바스크립트

sliderEffect03 - 연속적으로 넘기기

(*ᴗ͈ˬᴗ͈)ꕤ*.゚ 2022. 2. 16. 19:22

HTML 구성

<section id="sliderType03">
    <div class="slider__wrap">
        <div class="slider__img">
            <div class="slider__inner">
                <div class="slider"><img src="img/images01.jpg" alt="이미지1"></div>
                <div class="slider"><img src="img/images02.jpg" alt="이미지2"></div>
                <div class="slider"><img src="img/images03.jpg" alt="이미지3"></div>
                <div class="slider"><img src="img/images04.jpg" alt="이미지4"></div>
                <div class="slider"><img src="img/images05.jpg" alt="이미지5"></div>
            </div>
        </div>
    </div>
</section>

JS 구성

{
    const sliderInner = document.querySelector(".slider__inner");     // 이미지 움직이는 영역
    const slider = document.querySelectorAll(".slider");     // 각각의 이미지 

    let currentIndex = 0;     // currentIndex를 0으로 선언
    let sliderCount = slider.length;     // sliderCount를 이미지 총 갯수로 선언
    let sliderWidth = sliderImg.offsetWidth;
    // sliderWidth를 패딩 마진 값 다 뺀 콘텐츠 길이로 선언(800px)
    let sliderClone = sliderInner.firstElementChild.cloneNode(true);     // 첫 번째 이미지 복사
    sliderInner.appendChild(sliderClone);     // 첫 번째 이미지를 마지막에 넣어 줌

    function sliderEffect(){     // sliderEffect 함수 선언
        currentIndex++;     // currentIndex 값을 1씩 증가 시킴

        sliderInner.style.transition = "all 0.3s"     // sliderInner의 스타일에 transition 추가
        sliderInner.style.transform = "translateX(-" + sliderWidth * currentIndex  + "px)"
        // sliderInner의 스타일에 transform 추가(-0px, -800px, -1600px, -2400px, -3200px, -4000px)

        // 첫 번째 사진으로 돌아왔을 때 어떻게 할까?
        if(currentIndex == 5){     // 만약 currentIndex가 5라면 = 첫번째 사진으로 돌아왔다면,

            setTimeout(() => {     // 0.3초만에 바꾸자
            sliderInner.style.transition = "0s"     //0초만에
            sliderInner.style.transform = "translateX(0px)"     //x축 기준 0으로 가게 하자
             currentIndex = 0;     //그리곤 currentIndex값을 0으로 설정하자
        }, 300);
    }

    setInterval(sliderEffect, 1000);     // setInterval으로 sliderEffect실행 (1초 간격)
}

<용어 정리>

clientWidth: 패딩, 마진 값을 모두 뺀 컨텐츠의 길이

offsetWidth: 패딩 값을 포함한 (border까지) 컨텐츠의 길이

 

firstElementChild: 첫 번째 자식 요소

cloneNode: 요소를 복사

let sliderClone = sliderInner.firstElementChild.cloneNode(true);

sliderClone은 sliderInnder의 첫번째 자식요소를 복사한 것이다.

 

appendChild: 마지막 자식요소로 받아들인다

sliderInner.appendChild(sliderClone);

sliderInner의 맨 뒤에 sliderClone을 붙인다sliderClone은 sliderInner의 첫 번째 요소이다

 

즉, class="slider__inner"에는 1,2,3,4,5 이미지가 마지막에 1이 추가되어 1,2,3,4,5,1 이미지로 구성되어 있다 

 

 

링크https://sungilryuu.github.io/webs_class/javascript/effect/sliderEffect03.html