* 공부 및 자격증을 위해 작성하는 글입니다.
* 부족한 내용이나 틀린 내용을 알려주시면 감사합니다.
* 코딩애플 js 강의를 참고하여 기능을 연습했습니다.
예전에 margin-left를 이용한 슬라이드(캐러셀)을 배운적이 있었다.
그런데 translate를 이용해야 애니메이션 기능을 만들때 더욱 부드럽게 작용한다고 한다.
실제로 이번에 다시 기능 복습하면서 캐러셀을 margin-left를 사용해서 만들었었는데
PC에선 괜찮았지만 모바일에서는 '다음' 버튼을 처음 화면에서 누를 때마다 캐러셀 넘김이 뚝뚝 끊겼다.
translate로 다시 만드니 이 부분은 해결됐다.
버튼 부분은 ul과 li로 만드는게 더 깔끔해 보이지만, button으로도 만들어봤다.
코드
<!-- css -->
<style>
* {
margin: 0;
padding: 0;
}
.clearFix::after {
content: '';
display: block;
clear: both;
}
.slide_wrap {
overflow: hidden;
width: 300px;
margin-bottom: 5px;
}
.slide_container {
width: 300%;
transition: all 1s;
}
.slide_box {
width: 33.333333%;
height: 180px;
float: left;
text-align: center;
line-height: 180px;
}
.slide_box:nth-child(1) {
background-color: #c3e2dc;
}
.slide_box:nth-child(2) {
background-color: #ebf3ef;
}
.slide_box:nth-child(3) {
background-color: #fae18d;
}
.s_btn {
width: 56.5px;
height: 25px;
border: 1px solid #eee;
background-color: #eee;
cursor: pointer;
}
</style>
<!-- html -->
<div class="slide_wrap">
<div class="slide_container clearFix">
<div class="slide_box">1번째 박스</div>
<div class="slide_box">2번째 박스</div>
<div class="slide_box">3번째 박스</div>
</div>
</div>
<button type="button" class="slide_prev s_btn">이전</button>
<button type="button" class="slide_1 s_btn">1</button>
<button type="button" class="slide_2 s_btn">2</button>
<button type="button" class="slide_3 s_btn">3</button>
<button type="button" class="slide_next s_btn">다음</button>
<!-- js -->
<script>
var slide_1 = document.querySelector('.slide_1');
var slide_2 = document.querySelector('.slide_2');
var slide_3 = document.querySelector('.slide_3');
var slide_prev = document.querySelector('.slide_prev');
var slide_next = document.querySelector('.slide_next');
var slideContainer = document.querySelector('.slide_container');
// 번호를 누르면 해당 순번의 박스가 보여짐
slide_1.addEventListener('click', function(){
slideContainer.style.transform = "translateX(0%)";
});
slide_2.addEventListener('click', function(){
slideContainer.style.transform = "translateX(-33.333333%%)";
});
slide_3.addEventListener('click', function(){
slideContainer.style.transform = "translateX(-66.666666%)";
});
// 이전 or 다음 버튼 누르면 현재 박스에서 해당 방향 박스로 슬라이드 넘어감
var slideNumber = 0;
slide_prev.addEventListener('click', function(){
if(slideNumber == 0){
slideNumber = 2;
}
else {
slideNumber--;
}
slideMove();
});
slide_next.addEventListener('click', function(){
if(slideNumber == 2){
slideNumber = 0;
}
else {
slideNumber++;
}
slideMove();
});
// 반복되는 코드라서 slideMove 함수에 넣어줌
function slideMove(){
slideContainer.style.transform = "translateX(-" + 33.333333 * slideNumber + "%)";
}
</script>
반응형
'✏️ 공부 > JavaScript' 카테고리의 다른 글
Array는 [], Object는 {} (0) | 2022.05.16 |
---|---|
스크롤 하면 프로그래스바 채우기 (0) | 2022.04.25 |
비밀번호 보이기/감추기 기능 (0) | 2022.04.16 |
click me-! (0) | 2022.04.05 |
[JS] 반복문 제어(break 문, continue 문) (0) | 2022.02.13 |