Giant Danio Fish
본문 바로가기
Javascript_Effect

슬라이더 이펙트 - 좌로 움직이기

by 코딩왕자 2022. 8. 29.

슬라이더 효과

슬라이드 이펙트 - 좌로 움직이기

이번에는 사진을 우에서 좌로 한칸씩 땡겨가면서 다음사진으로 넘어가는 효과를 줘보겠습니다.


결과


HTML 작성

HTML 틀은 기존 틀과 동일하지만 slider 클래스에 slider__inner로 감싸주었습니다.

<section id="sliderType02">
    <div class="slider__wrap">
        <div class="slider__img">
            <div class="slider__inner">
                <div class="slider"><img src="../assets/img/effect_bg06.jpg" alt="이미지1"></div>
                <div class="slider"><img src="../assets/img/effect_bg07.jpg" alt="이미지2"></div>
                <div class="slider"><img src="../assets/img/effect_bg08.jpg" alt="이미지3"></div>
                <div class="slider"><img src="../assets/img/effect_bg09.jpg" alt="이미지4"></div>
                <div class="slider"><img src="../assets/img/effect_bg10.jpg" alt="이미지5"></div>
            </div>
        </div>
    </div>
</section>

CSS 작성

마찬가지로 전체적인 CSS는 동일하지만 slider을 감싸고있는 slider__inner에 flex를 사용해서 사진을 일열로 세운뒤, 이미지가 보일 영역에 overflow hidden을 줘서 나머지 사진들을 안보이게 설정했습니다.

.slider__wrap {
    width: 100%;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
}
.slider__img {           /* 이미지 보이는 영역 */
    position: relative;
    width: 800px;
    height: 450px;
    overflow: hidden;
}
.slider__inner {         /* 이미지를 감싸고 있는 부모 : 움직이는 부분 */
    display: flex;
    flex-wrap: wrap;
    width: 4000px;
    height: 450px;
}
.slider {                /* 개별적인 이미지 */
    position: relative;
    width: 800px;
    height: 450px;
}
.slider::before {
    position: absolute;
    left: 5px;
    top: 5px;
    background: rgba(0,0,0,0.4);
    color: #fff;
    padding: 5px 10px;
}
.slider:nth-child(1)::before {content: '이미지1'}
.slider:nth-child(2)::before {content: '이미지2'}
.slider:nth-child(3)::before {content: '이미지3'}
.slider:nth-child(4)::before {content: '이미지4'}
.slider:nth-child(5)::before {content: '이미지5'}
.slider:nth-child(1) {z-index: 5;}
.slider:nth-child(2) {z-index: 4;}
.slider:nth-child(3) {z-index: 3;}
.slider:nth-child(4) {z-index: 2;}
.slider:nth-child(5) {z-index: 1;}

@media (max-width: 800px){
    .slider__img {
        width: 400px;
        height: 225px;
    }
}

JS 작성

마찬가지로 큰 틀은 비슷하지만 움직이는 영역 sliderInner에 스타일을 직접작성해 부드럽게 만들고, setInterval 메서드로 2초마다 순서를 바뀌게 만들고, x축으로 800px씩 움직이도록 만들었습니다.

const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = document.querySelector(".slider__img");      //보여지는 영역
const sliderInner = document.querySelector(".slider__inner");  //움직이는 영역
const slider = document.querySelectorAll(".slider");           //이미지

let currentIndex = 0;                    //현재 이미지
let sliderCount = slider.length;         //이미지 갯수

sliderInner.style.transition = "all 0.6s";

// sliderInner.style.transform += "translateX(0px)";        800 * 0
// sliderInner.style.transform += "translateX(-800px)";     800 * 1
// sliderInner.style.transform += "translateX(-1600px)";    800 * 2
// sliderInner.style.transform += "translateX(-2400px)";    800 * 3
// sliderInner.style.transform += "translateX(-3200px)";    800 * 4

setInterval(() => {

    currentIndex = (currentIndex + 1) % sliderCount;    //1 2 3 4 0 1 2 3 4 0 1 2 3 4

    // if(currentIndex < 4){
    //     currentIndex++;
    // } else {
    //     currentIndex = 0;
    // }

    // currentIndex < 4 ? currentIndex++ : currentIndex = 0;

    sliderInner.style.transform = "translateX("+ -800 * currentIndex +"px)";
},2000);

추가로 JAVASCRIPT 말고 GSAP와 JQUERY를 이용해서 만드는 방법도 원본사이트 우측 아래에 소스 보기에 작성 해놓았으니 참고하시기 바랍니다.

댓글


광고 준비중입니다