캐러셀(Carousel): 슬라이드 형태로 여러 이미지를 볼 수 있는 콘텐츠
<img>
넣기<img src="이미지명.png">
로 넣기margin-left: -100vw;
margin-left: -200vw;
transform: translateX();
overflow: hidden;
: 넘치는 요소 숨기는 기능
.style.속성
document.querySelector('.slide-container').style.transform = 'translateX(-100vw)'
.css(속성)
$('.slide-container').css('transform', 'translateX(-100vw)');
<slide-box>
태그의 이미지(img) 크기 조절하기.slide-box img {
...
}
float: left;
: 왼쪽으로 배치
.slide-container {
width: 300vw;
transition: all 1s;
}
.slide-box {
width: 100vw;
float: left; /* 왼쪽으로 배치 */
}
.slide-box img {
width: 100%;
}
// 2번째 사진 불러오기
document.getElementsByClassName('slide-2')[0].addEventListener('click', function() {
document.querySelector('.slide-container').style.transform = 'translateX(-100vw)'
});
var now = 1; // 현재 사진 변수
document.querySelector('.next').addEventListener('click', function() {
if (now == 3) { // 마지막 장에서 '다음'을 누르면 첫 번째 장이 나오도록
document.querySelector('.slide-container').style.transform = 'translateX(0vw)'
now = 1;
} else {
document.querySelector(".slide-container").style.transform = "translateX(-" + now + "00vw)";
now++;
}
});
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="main.css" />
</head>
<body>
<div style="overflow: hidden;">
<div class="slide-container">
<div class="slide-box">
<img src="car1.png">
</div>
<div class="slide-box">
<img src="car2.png">
</div>
<div class="slide-box">
<img src="car3.png">
</div>
</div>
</div>
<button class="slide-1">1</button>
<button class="slide-2">2</button>
<button class="slide-3">3</button>
<button class="next">다음</button>
<button class="before">이전</button>
<script src="index.js"></script>
</body>
</html>
index.js
// 사진 버튼
/* 2번 버튼 클릭 시 - 2번 사진 가져오기(1번 사진을 왼쪽으로 밀기) */
document.getElementsByClassName('slide-2')[0].addEventListener('click', function() {
document.querySelector('.slide-container').style.transform = 'translateX(-100vw)'
});
// 3번 버튼
document.getElementsByClassName('slide-3')[0].addEventListener('click', function() {
document.querySelector('.slide-container').style.transform = 'translateX(-200vw)'
});
// 1번 버튼
document.getElementsByClassName('slide-1')[0].addEventListener('click', function() {
document.querySelector('.slide-container').style.transform = 'translateX(0vw)'
});
// 다음 버튼 - 현재 사진이 1번이면 -> 2번 보여주기
var now = 1; // 현재 사진 변수
document.querySelector('.next').addEventListener('click', function() {
// JS 확장 버전
if (now == 3) { // 마지막 장에서 '다음'을 누르면 첫 번째 장이 나오도록
document.querySelector('.slide-container').style.transform = 'translateX(0vw)'
now = 1;
} else {
document.querySelector(".slide-container").style.transform = "translateX(-" + now + "00vw)";
now++;
}
});
// if (now == 1) { // 현재 사진이 1번이면 -> 2번 보여주기
// document.querySelector('.slide-container').style.transform = 'translateX(-100vw)'
// now++;
// } else if (now == 2) { // 현재 사진이 2번이면 -> 3번 보여주기
// document.querySelector('.slide-container').style.transform = 'translateX(-200vw)'
// now++;
// } else if (now == 3) { // 현재 사진이 3번이면 -> 다시 1번 보여주기
// document.querySelector('.slide-container').style.transform = 'translateX(0vw)'
// }
// jQuery 확장 버전
// $('.next').on('click', function(){
// $('.slide-container').css('transform', 'translateX(-' + 지금사진 + '00vw)');
// 지금사진 += 1;
// })
// 이전 버튼
document.querySelector('.before').addEventListener('click', function() {
// JS 확장 버전
if (now == 1) { // 첫 번째 장에서 '이전'을 누르면 마지막 장이 나오도록
document.querySelector('.slide-container').style.transform = 'translateX(-200vw)'
now = 3;
} else {
document.querySelector(".slide-container").style.transform = "translateX(-" + (now - 2) + "00vw)";
now--;
}
});
// if (now == 1) { // 현재 사진이 1번이면 -> 3번 보여주기
// document.querySelector('.slide-container').style.transform = 'translateX(-200vw)'
// now = 3;
// } else if (now == 2) { // 현재 사진이 2번이면 -> 1번 보여주기
// document.querySelector('.slide-container').style.transform = 'translateX(0vw)'
// now--;
// } else if (now == 3) { // 현재 사진이 3번이면 -> 2번 보여주기
// document.querySelector('.slide-container').style.transform = 'translateX(-100vw)'
// now--;
// }
main.css
.slide-container {
width: 300vw; /* vw: 브라우저 폭 */
/* 최종화면: 2번째 화면 나오게 하기 => 1번째 사진 왼쪽으로 밀기 */
/* 1. margin-left: -100vw; */
/* - margin-left: -200vw; -> 3번째 화면 */
/* 2. transform: translateX(); */
/* - 성능 면에서 margin보다 더 좋음 */
transition: all 1s;
}
.slide-box {
width: 100vw;
float: left;
/* float: left; - 왼쪽으로 배치 */
}
.slide-box img {
/* slide-box의 이미지(img) 크기 조절하기: .slide-box img { } */
width: 100%;
/* 브라우저에 맞게(100%) 조정 */
}
출처
코딩애플