TeamProjectHappy/front

Swipe, Carousel

karatejin 2023. 1. 18. 22:36

Carousel 을 이용한 하나의 이미지가 출력되는배너는 그럭저럭 하면 되었지만,

Card List 를 통해서 여러개의 목록을 Swipe 하게 하는 것에 애를 많이 먹었다.

 

우선 리엑트와 자바스크립트 타입스크립트에 대한 지식이 전무한 상태에서 하려고 하다보니 원하는 결과가 나오지 못했다.

 

 

안된다.

 

import React from "react";
import Slider from "react-slick";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import NextArrow from "react-slick";

import Course1 from '../../asset/images/exwebfront.png'
import Course2 from '../../asset/images/htmlbasic.png'

function Carousel() {
	const settings = {
    	dots: true, // 밑에 점 화면의 개수 표시
        infinite: false, // 무한으로 회전 못하게 하기
        speed: 500,
        slidesToShow: 4, // 4개의 카드를 보여준다.
        slidesToScroll: 4, //4개의 카드가 회전한다.
        nextArrow: <NextArrow />, //이것 때문에 움직이지 않음
        dotsClass: "custom-dots", //필요 없는것
        initialSlide: 0, //없어도 됨.
        responsive: [
            {
            breakpoint: 1024,
            settings: {
                slidesToShow: 3,
                slidesToScroll: 3,
                infinite: false,
                dots: true
            }
            },
            {
            breakpoint: 600,
            settings: {
                slidesToShow: 2,
                slidesToScroll: 2,
                initialSlide: 2
            }
            },
            {
            breakpoint: 480,
            settings: {
                slidesToShow: 1,
                slidesToScroll: 1
            }
            }
        ]
    }
    return(        
    
        <div className="course_dashboard">
            <div className="course_dashboard_list"> 
                <div className="course_dashboard_title">                    
                    <div>
                        <h3>프론트엔드</h3>
                        <p style={{fontSize: "13px"}}>해삐와 함께하는 프론트엔드</p>
                    </div>
                </div> 
                <div className="course_dashboard_card">
    	            <Slider {...settings}>
                    <div className="course_card">
                        <img src={Course1} alt="" className="course_face"/>
                        <div className="course_title">
                            React 완벽가이드
                        </div>
                        <div className="course_instructor">
                            해피코딩
                        </div>
                        <div className="course_rating">
                            4.7
                        </div>
                        <div className="course_price">
                            17000원
                        </div>
                        <div className="course_tag">
                            베스트셀러
                        </div>
                    </div>
                    <div className="course_card">
                        <img src={Course2} alt="" className="course_face"/>
                        <div className="course_title">
                            React 완벽가이드
                        </div>
                        <div className="course_instructor">
                            해피코딩
                        </div>
                        <div className="course_rating">
                            4.7
                        </div>
                        <div className="course_price">
                            17000원
                        </div>
                        <div className="course_tag">
                            베스트셀러
                        </div>
                    </div>
                    <div className="course_card">
                        <img src={Course1} alt="" className="course_face"/>
                        <div className="course_title">
                            React 완벽가이드
                        </div>
                        <div className="course_instructor">
                            해피코딩
                        </div>
                        <div className="course_rating">
                            4.7
                        </div>
                        <div className="course_price">
                            17000원
                        </div>
                        <div className="course_tag">
                            베스트셀러
                        </div>
                    </div>
                    <div className="course_card">
                        <img src={Course1} alt="" className="course_face"/>
                        <div className="course_title">
                            React 완벽가이드
                        </div>
                        <div className="course_instructor">
                            해피코딩
                        </div>
                        <div className="course_rating">
                            4.7
                        </div>
                        <div className="course_price">
                            17000원
                        </div>
                        <div className="course_tag">
                            베스트셀러
                        </div>
                    </div>
                    <div className="course_card">
                        <img src={Course1} alt="" className="course_face"/>
                        <div className="course_title">
                            React 완벽가이드
                        </div>
                        <div className="course_instructor">
                            해피코딩
                        </div>
                        <div className="course_rating">
                            4.7
                        </div>
                        <div className="course_price">
                            17000원
                        </div>
                        <div className="course_tag">
                            베스트셀러
                        </div>
                    </div>
                    </Slider>
                </div>
            </div>
        </div>
    );
}

export default Carousel;

리엑트 부트스트랩이 아닌 슬릭을 통해서 구현하려고 하였으나 원하는 그림이 아니었다.

 

위와 같이 카드가 4개 정도

 

그러나 리엑트 슬릭은 자바스크립트 기반이기 때문에 타입스크립트 형식으로 설치가 필요했다.

인스톨을 3개나 했다. 아마 더 간단한 방법이 있을 수 도 있다.

  • npm install --save @types/react-slick
  • npm install --save react-slick 
  • npm install --save slick-carousel

 

필요한 것은 화면에 카드 4개가 나오고 하단의 점을 없애고 양 끝의 화살표를 눌렀을 때 슬라이드가 되게 하기

 

import Slider from "react-slick";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";

import Course1 from '../Asset/images/exwebfront.png'
import Course2 from '../Asset/images/htmlbasic.png'

function Carousel() {
	const settings = {    	
        infinite: false, 
        //true 이면 방향에 상관없이 회전, false이면 카드가 맨 왼쪽이면 더이상 못감
        speed: 500,
        slidesToShow: 4,
        slidesToScroll: 1,
        // swipeToSlide: true,
        initialSlide: 0
    }
    return(
  
        <div className="course_dashboard">
            <div className="course_dashboard_list"> 
                <div className="course_dashboard_title">                    
                    <div>
                        <h3>프론트엔드</h3>
                        <p style={{fontSize: "13px"}}>해삐와 함께하는 프론트엔드</p>
                    </div>
                </div> 
                <div className="course_dashboard_card">
    	            <Slider {...settings}>
                    <div className="course_card">
                        <img src={Course1} alt="" className="course_face"/>
                        <div className="course_title">
                            React 완벽가이드
                        </div>
                        <div className="course_instructor">
                            해피코딩
                        </div>
                        <div className="course_rating">
                            4.7
                        </div>
                        <div className="course_price">
                            17000원
                        </div>
                        <div className="course_tag">
                            베스트셀러
                        </div>
                    </div>
                    <div className="course_card">
                        <img src={Course2} alt="" className="course_face"/>
                        <div className="course_title">
                            React 완벽가이드
                        </div>
                        <div className="course_instructor">
                            해피코딩
                        </div>
                        <div className="course_rating">
                            4.7
                        </div>
                        <div className="course_price">
                            17000원
                        </div>
                        <div className="course_tag">
                            베스트셀러
                        </div>
                    </div>
                    <div className="course_card">
                        <img src={Course1} alt="" className="course_face"/>
                        <div className="course_title">
                            React 완벽가이드
                        </div>
                        <div className="course_instructor">
                            해피코딩
                        </div>
                        <div className="course_rating">
                            4.7
                        </div>
                        <div className="course_price">
                            17000원
                        </div>
                        <div className="course_tag">
                            베스트셀러
                        </div>
                    </div>
                    </Slider>
                </div>
            </div>
        </div>
    );
}

export default Carousel;

 

겨우됐다.

겨우 됐다.