슬라이더 효과
슬라이드 이펙트 - 좌로 움직이기
이번에는 사진을 우에서 좌로 한칸씩 땡겨가면서 다음사진으로 넘어가는 효과를 줘보겠습니다.
결과
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를 이용해서 만드는 방법도 원본사이트 우측 아래에 소스 보기에 작성 해놓았으니 참고하시기 바랍니다.
'Javascript_Effect' 카테고리의 다른 글
패럴랙스 이펙트 - 메뉴 이동 (12) | 2022.09.06 |
---|---|
슬라이더 이펙트 - 좌로 움직이기(연속) (8) | 2022.09.01 |
슬라이더 이펙트 - 트랜지션 효과 (10) | 2022.08.29 |
퀴즈만들기 - 객관식(여러문제)슬라이드 유형 (11) | 2022.08.24 |
퀴즈 만들기 - 객관식(여러문제)유형 (9) | 2022.08.23 |
댓글