이미지 슬라이드 - 연속적으로 넘기기
<main>
<section id="sliderType01">
<div class="slider__wrap">
<div class="slider__img">
<div class="slider__inner">
<div class="slider"><img src="../img/img6.jpg" alt="이미지1"></div>
<div class="slider"><img src="../img/img7.jpg" alt="이미지2"></div>
<div class="slider"><img src="../img/img8.jpg" alt="이미지3"></div>
<div class="slider"><img src="../img/img9.jpg" alt="이미지4"></div>
<div class="slider"><img src="../img/img10.jpg" alt="이미지5"></div>
</div>
</div>
</div>
</section>
</main>
.slider__wrap {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.slider__img { /*화면 보이는 구간*/
width: 800px;
height: 480px;
overflow: hidden;
}
.slider__inner { /*이미지 움직이는 영역*/
display: flex;
width: 4800px; /*이미지 총 길이*/
transform: translateX(0); /*left를 사용하기 위해서*/
}
.slider {
width: 800px;
position: relative;
}
.slider::before {
position: absolute;
left: 5px;top: 5px;
background: rgba(0,0,0,0.4);
color: #fff;
padding: 5px 10px 3px;
}
.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(6):before {content: '이미지1';}
highlight(); //외부 스크립트 함수 (highlight)호출
modal (); //외부 스크립트 함수 (modal, 소스보기 창)호출
tabMenu (); //외부 스크립트 함수 (tabMenu, 소스보기의 탭 메뉴)호출
// slider03
const sliderWrap = document.querySelector(".slider__wrap"); //sliderWrap에 div 태그 .slider__wrap 저장
const sliderImg = document.querySelector(".slider__img"); //sliderImg에 div 태그 .slider_img 저장, 이미지 한 칸만 보이는 영역
const sliderInner = document.querySelector(".slider__inner"); //이미지 움직이는 영역
const slider = document.querySelectorAll(".slider"); //slider에 div 태그 .slider (최종적으로 이미지를 담는 다섯개의 div)
//.slider__inner > div:first-child
let currentIndex = 0;
let sliderCount = slider.length; //이미지 갯수
let sliderWidth = sliderImg.offsetWidth; //이미지 가로 값
let sliderClone = sliderInner.firstElementChild.cloneNode(true); //첫번째 이미지 복사
sliderInner.appendChild(sliderClone); //첫번째 이미지를 마지막에 넣어줌
function sliderEffect(){
currentIndex++; //sliderEffect함수가 실행할 때 마다 index값 1 증가
sliderInner.style.transition = "all 0.3s"; //sliderInner의 움직임을 0.3초 동안으로 설정
sliderInner.style.transform = `translateX(-${sliderWidth*currentIndex}px)`; //sliderInner를 x축으로 -sliderWidth(-800px)*currentIndex픽셀만큼 바꾼다.
//마지막 사진에 갔을때
if(currentIndex == sliderCount){ //인덱스 값이 증가하다가 sliderCount(slider의 길이)와 같아지면
//setTimeout() 메서드는 만료된 후 함수나 지정한 코드 조각을 실행하는 타이머를 설정합니다.
setTimeout(()=>{
//이미지 초기화
sliderInner.style.transition = "0s"; //이미지 전환 시간을 0으로 바꿔 초기화가 자연스럽게 이루어지게 한다.
sliderInner.style.transform = 'translateX(0)'; //이미지의 위치 값을 0으로 바꿈(제일 처음 이미지로 온다.)
}, 300); //함수 지연시간을 transition의 움직인 시간 0.3초와 맞춰 자연스럽게 이미지초기화/전환이 이어게 한다.
currentIndex = 0; //인덱스 값 초기화
}
}
setInterval(sliderEffect, 2000); //2초마다 sliderEffect함수를 실행시켜주는 setInterval메소드