본문 바로가기
PROGRAMING📚/WEB📑

[WEB]JS-이미지 슬라이드 만들기

별찌루 2023. 9. 18.
728x90
반응형

이미지 슬라이드 만들기

 

 

위와 같이 동그라미 버튼을 누르면 다른 이미지가 변하는 슬라이드를 만들어 보려고 한다

 사용할 이미지를 폴더 안에 넣어주고

body 태그 안에  이미지를 담아줄 큰그룹 (slide-container) 태그를 만들어주고

그 안에 이미지 태그를 3개를 들어서 넣어주었다

 

      <div class="slide-container">
        <div class="slide-card-bg"><img src="IMG/img1.jpg" /></div>
        <div class="slide-card-bg"><img src="IMG/img2.jpg" /></div>
        <div class="slide-card-bg"><img src="IMG/img3.jpg" /></div>
      </div>

 

슬라이드를 만들어주기 위해서 

세로로 정렬된 이미지를 가로로 정렬 시켜주어야한다

그러기 위해서 CSS 파일을 하나 만들어준다

 

.slide-container {
  width: 300vw;
}
.slide-card-bg {
  float: left;
  width: 100vw;
}

반응형 웹에서 사용되어지는 크기의 단위 중 하나가 vw(Viewport Width), 그리고 vh (Viewport Height)가 있다

가로 사이즈에 대응하여 변화하는 크기이고, vh는 세로 사이즈의 변화에 따른 크기다.

vw/px 계산하는 사이트: http://publishing.kr/vw/

현재 브라우저 창의 크기에 따라서 1vw의 사이즈의 px의 값이 달라진다

현재 창 크기가 가로 폭이 1000px 이라고 가정 했을 때, 1vw는 10px의 사이즈를 의미한다

 

이미지 3개가 나열되게 보여주기 위해서

전체 div 박스의 width 를 300vw 로 작성해주고

이미지의 사이즈를 100vw 로 해주었다

 

float :left 속성을 사용해서 이미지를 왼쪽 정렬까지 해주고 나면

이미지 3개가  나란히 배치된다

 

 

버튼을 눌렸을때, 원하는 이미지를 보여주기 위해서

이미지의 종류에 따라서 버튼을 3개 만들어주고

slide-container 안에 overflow-hidden을 적용해서

하단의 스크롤 바를 안보이게 할 수있다 

 

   <div style="ovwerflow-hidden">
      <div class="slide-container">
        <div class="slide-card-bg"><img src="IMG/img1.jpg" /></div>
        <div class="slide-card-bg"><img src="IMG/img2.webp" /></div>
        <div class="slide-card-bg"><img src="IMG/img3.jpg" /></div>
      </div>
    <div class="btn-container">
      <button class="1-button">1</button>
      <button class="2-button">2</button>
      <button class='3-button'>3</button>
    </div>

 이제 버튼을 누르면 이미지의 전환 하는 애니메이션을 넣어줘야 한다

2번 버튼을 눌렀을 때, 현재 이미지가 1번 이미지일 경우,

 <div class="slide-container"> 태그가 X축으로 이동하는 애니메이션을 넣어주면된다.

 

  <script>
      $(".1-button").on("click", function () {
        $(".slide-container").css("transform", "translateX(0vw)");
      });
      $(".2-button").on("click", function () {
        $(".slide-container").css("transform", "translateX(-100vw)");
      });
      $(".3-button").on("click", function () {
        $(".slide-container").css("transform", "translateX(-200vw)");
      });
    </script>
.slide-container {
  width: 300vw;
  transition: all 1s;
  transform: translateX(0vw);
}

 기본 위치값을 0으로 잡고 버튼 클릭에 따라서 

container 박스를 이동시키는 애니메이션을 넣어준다

전체 코드

더보기

HTML

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Javascript Study</title>
    <link href="css.css" rel="stylesheet" />
    <link
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
      crossorigin="anonymous"
    />
    <script
      src="https://code.jquery.com/jquery-3.7.1.min.js"
      integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
      crossorigin="anonymous"
    ></script>
  </head>
  <body>
     <div style="overflow: hidden">
      <div class="slide-container">
        <div class="slide-card-bg"><img src="IMG/img1.jpg" /></div>
        <div class="slide-card-bg"><img src="IMG/img2.webp" /></div>
        <div class="slide-card-bg"><img src="IMG/img3.jpg" /></div>
      </div>
    </div>
    <div class="btn-container">
      <button class="1-button">1</button>
      <button class="2-button">2</button>
      <button class="3-button">3</button>
    </div>

    <script>
      $(".1-button").on("click", function () {
        $(".slide-container").css("transform", "translateX(0vw)");
      });
      $(".2-button").on("click", function () {
        $(".slide-container").css("transform", "translateX(-100vw)");
      });
      $(".3-button").on("click", function () {
        $(".slide-container").css("transform", "translateX(-200vw)");
      });
    </script>
  </body>
</html>

CSS

.slide-container {
  width: 300vw;
  transition: all 1s;
  transform: translateX(0vw);
}
.slide-card-bg {
  width: 100vw;
  float: left;
}
.slide-card-bg img {
  width: 100%;
}
.btn-container {
  text-align: center;
  margin: 10px;
}
728x90
반응형

댓글