html,css,js

[html, css, js] 초간단 슬라이드 배너 (캐러셀) 만들기

코복이 2023. 5. 24. 01:06
728x90

1. 슬라이드 원리

1) 일정한 크기의 이미지들을 float:left로  '가로'로 정렬 <!--  slide_item-->

2) overflow: hidden 으로 딱 한장씩만 보이게 함 <!-- box-->
3) 버튼을 누르면 transform: translateX(±한장크기)로 한장씩 다음/이전 슬라이드 이동 <!-- slide_box-->
 

이런 구조로 만들겁니다.

 
 

2. HTML 작성

1) 슬라이드는 4개 준비
2) 이전 버튼, 다음 버튼도 빠지면 섭함
3) 아이콘은 폰트어썸(fontawesome)에서 연결

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <script src="https://kit.fontawesome.com/516da99189.js" crossorigin="anonymous"></script>
    <title>new_slide</title>
</head>
<body>
    <!-- html -->
    <div class="wrap">
        <div class="prev"><i class="fa-sharp fa-solid fa-arrow-left"></i></div>
        <div class="box">
            <div class="slide_box">
                <div class="slide_item">
                    <a href=""><img src="slide/Frame 1.jpg" alt="1"></a>
                </div>
                <div class="slide_item">
                    <a href=""><img src="slide/Frame 2.jpg" alt="2"></a>
                </div>
                <div class="slide_item">
                    <a href=""><img src="slide/Frame 3.jpg" alt="3"></a>
                </div>
                <div class="slide_item">
                    <a href=""><img src="slide/Frame 4.jpg" alt="4"></a>
                </div>
            </div>
        </div>
        <div class="next"><i class="fa-sharp fa-solid fa-arrow-right"></i></div>
    </div>

 

3. CSS 작성

1) float: left 로 이미지를 가로열로 정렬

.slide_item {
    float: left;
}

2) 슬라이드에 한장 크기로 width를 정하고 넘치는건 숨기는 overflow: hidden 시전 (이쁘게 센터도 잡음)
- 여기서 배너 수가 많아질 가능성이 있다면 slide_box의 width 를 1000000으로 늘려도 됨 (대충 많이 늘려놓으라는 뜻)

.wrap {
    display: flex;
    justify-content: center;
    align-items: center;
}
.box {
   overflow: hidden;
    width: 400px;
}
.slide_box {
    width: 1600px;
    transition: 0.5s;
}
.slide_item {
    float: left;
}

3) 이전, 다음 버튼을 대충 꾸며준다.

.prev {
    padding: 10px;
    border-radius: 50%;
    cursor: pointer;
}
.prev:hover {
    background-color: black;
    color: white;
}

.next {
    padding: 10px;
    border-radius: 50%;
    cursor: pointer;
}
.next:hover {
    background-color: black;
    color: white;
}

<!-- 사전 준비 끝 -->

 

4. 스크립트 작성

1) document.querySelector('.클래스이름') 로 필요한 클래스를 변수에 담자
2) 필요한 변수: 이전버튼 / 다음버튼 / 슬라이드 담은 박스 / 슬라이드 전체 길이
3) 슬라이드를 움직이는 함수 제작 (slide_box 의 transform: traslateX(±길이) 길이를 바꾸는 함수)
4) 이전/다음 버튼에 .addEventListener 로 클릭했을 때 함수의 길이를 바꿔준다.

    <!-- js -->
    <script>
        const prev = document.querySelector('.prev');
        const next = document.querySelector('.next');
        const slideBox = document.querySelector('.slide_box')
        const slide = document.querySelectorAll('.slide_item img')
        const slideLangth = slide.length
        let currentIndex = 0;

        const moveSlide = function(num){
            slideBox.style.transform = `translateX(${-num * 400}px)`;
            currentIndex = num;
        }

        prev.addEventListener('click', ()=>{
            if(currentIndex !== 0){
                moveSlide(currentIndex -1)
            }
        })

        next.addEventListener('click', ()=>{
            if(currentIndex !== slideLangth -1){
                moveSlide(currentIndex +1)
            }
        })
    </script>

 
 

5. 완성

 

728x90