본문 바로가기
Effect

sliderEffect03

by 코터틀 2022. 9. 1.
반응형

sliderEffect03 - 좌로 움직이기(연속적으로)

세번째 슬라이드 이펙트 - 좌로 움직이기(연속적으로) 입니다. 2번 슬라이드 이펙트에서 마지막 사진에서 1번으로 되돌아가는것이 아닌, 뒤쪽에 1번~ 이미지가 지속적으로 업데이트 되어 연속적으로 움직이게 하였습니다.


참고

슬라이드 이펙트 03 페이지 우측하단 소스 보기를 클릭하시면 JAVASCRIPT, HTML, CSS를 확인할 수 있습니다.

JAVASCRIPT

애니메이션 효과가 보여지는 영역, 이미지가 움직일 영역, 각각의 이미지 선택자를 선언합니다.
다음은 변수를 선언합니다.(offsetWidth = 가로 크기, firstElementChild = 첫번째 요소, appendChild = 특정 요소를 마지막에 넣어줌)
함수를 생성하는데, 0.6초의 애니메이션 시간을 설정하고 x축으로 이미지의 가로크기 * 이미지의 갯수를 설정하여 1장씩 넘어가도록 합니다.
if함수를 통해 마지막 사진에 위치 했을 때 애니메이션 효과를 주고 currentIndex값을 초기화하여 지속적으로 애니메이션이 실행되도록 합니다.
setInterval(2000) = 2초마다 함수(애니메이션)를 반복 실행합니다.

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;                                    // 이미지 갯수
let sliderWidth = sliderImg.offsetWidth;                            // 이미지 가로값
let sliderClone = sliderInner.firstElementChild.cloneNode(true);    // 첫번째 이미지 복사
sliderInner.appendChild(sliderClone);                               // 첫번째 이미지를 마지막에 넣어줌

function sliderEffect() {
    currentIndex++;
    sliderInner.style.transition = "all 0.6s";

    sliderInner.style.transform = "translateX(-" + sliderWidth * currentIndex + "px)";

    // 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
    // sliderInner.style.transform = "translateX(-4000px)";  800*5
    // sliderInner.style.transform = "translateX(-4800px)";  800*6

    // 마지막 사진에 위치 했을 때
    if (currentIndex == sliderCount) {
        setTimeout(() => {
            sliderInner.style.transition = "0s";
            sliderInner.style.transform = "translateX(0px)";
        }, 700);
        currentIndex = 0;
    }
}
setInterval(sliderEffect, 2000);
반응형

'Effect' 카테고리의 다른 글

Parallax Effect01  (10) 2022.09.06
mouseEffect01  (5) 2022.09.06
sliderEffect02  (8) 2022.08.29
sliderEffect01  (8) 2022.08.29
QuizEffect06  (10) 2022.08.24

댓글


광고 준비중입니다.