프론트엔드 첫걸음

Carousel 만들기 본문

개발 공부/Javascript

Carousel 만들기

차정 2022. 7. 15. 18:10
[코딩애플 JavaScript 입문과 웹 UI개발]  강의 수강 후 배운 것을 정리한 것입니다.
https://codingapple.com/course/javascript-jquery-ui/

 

 

캐러셀은 CSS가 관건이다.

사진이 들어가는 slide list는 사진크기의 3배로 두고

사진을 하나만 보여주는 slide container는 사진크기의 1배로 두고, overflow:hidden을 주면된다.

img {
  vertical-align: bottom;
}

.slide-container {
  overflow: hidden; 
  width: 30vw;
}

.slide-list {
  background-color: grey;
  width: 90vw;
  transition: all 1s;
  display: flex;
}

.slide-box {
  width: 30vw;
}

.slide-box img {
  width: 100%;
}

 

 

그리고 나서 자바스크립트에서는 클릭할때마다 하나 사진크기만큼 왼쪽으로 이동시킨다.

margin-left를 마이너스 사진크기만큼 하는 것이다.

margin-left보다 translateX가 더 자연스럽게 이동한다.

 

사진크기가 30vw일때 아래와 같은 javascript 코드를 사용하면 된다.

document.querySelector('.slide-1').addEventListener('click', () => {
  document.querySelector('.slide-container').style.transform =
    'translateX(0vw)';
});
document.querySelector('.slide-2').addEventListener('click', () => {
  document.querySelector('.slide-container').style.transform =
    'translateX(-30vw)';
});
document.querySelector('.slide-3').addEventListener('click', () => {
  document.querySelector('.slide-container').style.transform =
    'translateX(-60vw)';
});

 

 

중복코드가 많아 수정해보았다. 

참고로 이미지 width를 구해서 px 이동하게 한 방법은
화면을 축소시키는 등 뷰포트를 변경시켰을 때 이상하게 작동했다.
이래서 vw단위를 쓰는거구나 했다.(반응형 페이지를 만들 때 vw, vh단위를 쓴다고 한다.) 

이미지 길이 width 하드코딩할수밖에 없는건가..ㅠㅠ

//let imgWidth = document.querySelector('.slide-box').clientWidth;//실패!
let width = 30;
let list = document.getElementsByClassName('slide');
for(let i = 0; i < list.length; i++ ) {
  document
    .querySelector('.slide-' + (i + 1))
    .addEventListener('click', () => {
    document.querySelector(
      '.slide-list'
   ).style.transform = `translateX(${-width * i}vw)`;
  });
};

 

 

어쨌든 응용하면 번호버튼 아닌 좌 우 버튼으로 이동하는 캐러셀도 만들 수 있다.

CSS 메뉴에 넣으려다가 이미지를 translate하는 개념이 더 어려운 것 같아서 javascript에 넣었다.

캐러셀은 여러가지 방법으로 만들 수 있다.

여러가지 방법을 찾아보고 더 좋은 방법을 찾게된다면 다시 포스팅하겠다. 

 

 

 

코드펜에서 보기

See the Pen carousel by JEONG (@cona) on CodePen.