승섭 8/6

섭승이·2023년 8월 6일
0
post-thumbnail
post-custom-banner

프로젝트에 캐러셀 적용하기

어제 "Embla-Carousel" 라이브러리를 사용해서 캐러셀을 적용시킨다고 게시글에 적었는데 생각보다 적용이 힘들어보여서 "React-slick" 을 사용하여 적용하였다.

우선 공식문서가 굉장히 보기 쉬웠고 이미 만들어져 있는 내 코드에 적용하기 가장 적합하다고 생각했다.

const TopPostList = (props: TopPostListPropType) => {
  const { data } = props;
  const settings = {
    infinite: true,
    slidesToShow: 3,
    autoplay: true, // 자동 스크롤 사용 여부
    autoplaySpeed: 5000, // 자동 스크롤 시 다음으로 넘어가는데 걸리는 시간 (ms)
    pauseOnHover: true, // 슬라이드 이동	시 마우스 호버하면 슬라이더 멈추게 설정
    swipeToSlide: true,
    responsive: [
      {
        breakpoint: 1000,
        settings: {
          slidesToShow: 2,
        },
      },
      {
        breakpoint: 700,
        settings: {
          slidesToShow: 1,
        },
      },
    ],
  };
  return (
    //<div className="grid grid-flow-col gap-16">
    <Slider {...settings}>
      {data?.map((post, index) => {
        return <TopPost key={index} post={post} />;
      })}
    </Slider>
    //</div>
  );
};

export default TopPostList;

코드에서 볼 수 있듯이 이 코드에서 가장 중요한 부분은 settings인데 캐러셀에 적용되는 모든 기능이 들어가 있다.

const settings = {
    infinite: true,
    slidesToShow: 3,
    autoplay: true, // 자동 스크롤 사용 여부
    autoplaySpeed: 5000, // 자동 스크롤 시 다음으로 넘어가는데 걸리는 시간 (ms)
    pauseOnHover: true, // 슬라이드 이동	시 마우스 호버하면 슬라이더 멈추게 설정
    swipeToSlide: true,
    responsive: [
      {
        breakpoint: 1000,
        settings: {
          slidesToShow: 2,
        },
      },
      {
        breakpoint: 700,
        settings: {
          slidesToShow: 1,
        },
      },
    ],
  };

이 부분이 케러셀에 적용되는 기능들이며 반응형도 있어 굉장히 코드 짜기가 쉬웠다.

<Slider {...settings}>
      {data?.map((post, index) => {
        return <TopPost key={index} post={post} />;
      })}
    </Slider>

이 코드를 통해 캐러셀을 적용해주었는데 이미 만들어져 있는 각각의 게시물 스타일에 캐러셀 기능만 추가해주면 된다.
원래

<div className="grid grid-flow-col gap-16"> 

이 코드로 스타일이 적용되어있었지만 주석처리 하고 위 아래를 Slider만 적용해주면 될 정도로 간단했다.

이 부분에 캐러셀이 적용이 잘 되었는데 벨로그에 비디오 삽입이 안되서 스크린샷으로 대체하였다.
원래 사이에 마진을 주려고 했으나,

맨 오른쪽 아이템에도 마진이 적용되는 문제가 있어서 포기했다.

//import styled from "styled-components";

// export const StyledSlider = styled(Slider)`
//   .slick-slide.slick-active {
//     padding-right: 30px;
//   }

//   .slick-list {
//     padding-right: -30px;
//   }
// `;

검색을 했을때 slick-list에 저 코드를 넣어주면 된다고 했으나 내 코드에서는 작동이 잘 되지 않았다.. 근데 마진 없는것도 생각보다 괜찮아서 일단 마진 없이 하기로 결정했다!

profile
초보개발자입니당
post-custom-banner

0개의 댓글