이런 느낌의 이미지 슬라이더를 만들어보았다
HTML
<div class="section" id="project">
<div class="title">
Projec<span class="title-end">t</span>
</div>
<div class="slider">
<span class="slider-arrow left-arrow">
<
</span>
<div class="slider-wrapper">
<div class="slider-slide">
<div class="slider-page">
<img src="img/proj_1.png" alt="">
</div>
<div class="slider-page">
<img src="img/proj_2.png" alt="">
</div>
<div class="slider-page">
<img src="img/proj_3.png" alt="">
</div>
</div>
</div>
<span class="slider-arrow right-arrow">
>
</span>
</div>
<div class="slider-dots">
<button class="dot-btn dot-page1"></button>
<button class="dot-btn dot-page2"></button>
<button class="dot-btn dot-page3"></button>
</div>
</div>
CSS
#project .title {
display: inline-block;
}
.slider {
width: 800px;
height: 400px;
margin: 0 auto;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.slider-wrapper {
width: 600px;
height: 400px;
overflow: hidden;
}
.slider-slide {
width: 1800px;
display: flex;
flex-direction: row;
transition: all 0.5s;
}
.slider-page {
width: 600px;
height: 400px;
}
.slider-page>img {
width: 600px;
height: 400px;
}
.slider-arrow {
margin: 0 20px;
display: inline-block;
font-size: 40px;
cursor: pointer;
}
.slider-dots {
margin-top: 15px;
}
.dot-btn {
width: 12px;
height: 12px;
border-radius: 50%;
margin: 0 10px;
background-color: transparent;
border: 2px solid black;
cursor: pointer;
}
.dot-btn.current-page {
background-color: black;
}
JavaSctipt & jQuery
let page = 1;
const max_page = 3;
$('.dot-page1').addClass('current-page');
function sliding()
{
switch(page){
case 1:
$('.slider-slide').css('transform', 'translateX(0)');
$('.dot-page1').addClass('current-page');
break;
case 2:
$('.slider-slide').css('transform', 'translateX(-600px)');
$('.dot-page2').addClass('current-page');
break;
case 3:
$('.slider-slide').css('transform', 'translateX(-1200px)');
$('.dot-page3').addClass('current-page');
break;
}
}
function clearDot(){
switch(page){
case 1:
$('.dot-page1').removeClass('current-page');
break;
case 2:
$('.dot-page2').removeClass('current-page');
break;
case 3:
$('.dot-page3').removeClass('current-page');
break;
}
}
$('.right-arrow').on('click', () => {
clearDot();
if(page == max_page){page = 1;}
else{page++;}
sliding();
})
$('.left-arrow').on('click', () => {
clearDot();
if (page == 1) {page = max_page;}
else {page--;}
sliding();
})
$('.dot-page1').on('click', () => {
clearDot();
page = 1;
sliding();
})
$('.dot-page2').on('click', () => {
clearDot();
page = 2;
sliding();
})
$('.dot-page3').on('click', () => {
clearDot();
page = 3;
sliding();
})
페이지를 추가할 경우
스크립트에서 sliding, clearDot 함수에 페이지 추가, max_page 변수 변경, 새로운 dot click 이벤트 추가해주고
css에서 slider-slide 클래스 전체 길이를 600px * 페이지 개수로 설정해 주면 된다
좌우 끝 페이지에서 화살표 버튼을 클릭하면 촤르륵 하면서 이동하는 대신 기존처럼 한 페이지씩 넘어가는 모션을 줘보고도 싶은데... 우선은 여기까지만
구현하는 데는 몇 시간이 걸렸는데 막상 정리하면서 코드를 보니 그렇게까지 오래 걸릴 일은 아니었던 것 같다 ㅋㅋ ㅠ
'Programing > HTML, CSS, JS' 카테고리의 다른 글
[CSS] input 요소 focus 시 외곽선 스타일 변경이 안 되는 문제 (0) | 2023.12.09 |
---|---|
[CSS] 드롭다운 메뉴바 구현하기 (0) | 2023.12.06 |
width: 100% 인데도 가로 스크롤바가 생기는 문제 (0) | 2023.11.28 |
[HTML / CSS] 회원가입 폼 만들기 (0) | 2023.10.19 |
html/css 기본 문법 정리 (0) | 2023.10.12 |