๐ŸŽ€ Wedding-card #4. Main Page - swiper

Graceยท2021๋…„ 7์›” 19์ผ
1

wedding-card

๋ชฉ๋ก ๋ณด๊ธฐ
4/7
post-thumbnail

โœ”๏ธ Main Page ๋งŒ๋“ค์–ด๋‚ด๊ธฐ

๊ฐ€์žฅ ๋‚ด์šฉ์ด ๋งŽ์€ ํŽ˜์ด์ง€์ด์ž,
๋งํฌ๋ฅผ ํƒ€๊ณ  ๋“ค์–ด์˜ค๋ฉด ์ œ์ผ ๋จผ์ € ๋ณด์—ฌ์ง€๊ธฐ์—
์‹ ๊ฒฝ๋„ ๋งŽ์ด ์“ฐ์ด๊ณ  ์ž‘์—…๋„ ์˜ค๋ž˜, ๊ทธ๋ฆฌ๊ณ  ๋๊นŒ์ง€ ์ˆ˜์ •์‚ฌํ•ญ์ด ๋งŽ์•˜๋˜ ํŽ˜์ด์ง€์ด๋‹ค.

์•„๋ž˜ ์ž‘์—…๋“ค์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ณ ์ถฉ์ด์—ˆ๋˜ ๋ถ€๋ถ„,
๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ”๋Š”์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋ฉฐ
๋‹ค์Œ์—๋Š” ์ข€ ๋” ๋นจ๋ฆฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธธ ๋ฐ”๋ผ๋ณธ๋‹ค :)

  • Swiper
  • ์ข‹์•„์š” ๋ฒ„ํŠผ
  • ๋Œ“๊ธ€ submit
  • toast message

๐Ÿ“Œ ์‚ฌ์ง„ Swiper ๊ธฐ๋Šฅ


ํ”„๋กœ์ ํŠธ ์ฒ˜์Œ ๊ธฐํšํ–ˆ์„ ๋•Œ ์ œ์ผ ์–ด๋ ค์šธ ๊ฒƒ ๊ฐ™๋‹ค ๋Š๊ปด์ง„ ๊ธฐ๋Šฅ,,,
์ž‘์—… ํ•˜๋‹ค๋ณด๋‹ˆ ์ด๊ฑด ์–ด๋ ค์šด๊ฒƒ๋„ ์•„๋‹ˆ์—ˆ๋‹ค๋Š”๊ฑธ ๊นจ๋‹ซ๊ธด ํ–ˆ์ง€๋งŒ
๊ธฐํšํ•˜๊ธฐ ์ „์—๋Š” ์™ ์ง€ ๋‹ค๊ฐ€๊ฐ€๊ธฐ ์–ด๋ ค์šด ๋Š๋‚Œ์ด์—ˆ๋‹คใ…Ž

์ธ์Šคํƒ€๊ทธ๋žจ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๊ธฐ์— ์‚ฌ์ง„์„ ๋ณผ ๋•Œ ํด๋ฆญํ•ด์„œ ๋ณด๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ
์†์œผ๋กœ ๋ฐ€์–ด๋„˜๊ฒจ์„œ ๋ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐพ๋‹ค์ฐพ๋‹ค ๊ฒฐ๊ตญ
๊ทธ๋ƒฅ Swiper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
( ์†์ˆ˜ ๋งŒ๋“ค์–ด๋‚ด๊ณ  ์‹ถ์—ˆ์ง€๋งŒ, ๋‹ค๋ฅธ ์ž‘์—…๋“ค์ด ๋‚˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ๊ธฐ์—... )

1. ํ™˜๊ฒฝ์„ค์ •ํ•˜๊ธฐ

$ yarn add swiper์„ ํ†ตํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  swiper ํŒจํ‚ค์ง€๋Š” ์Šคํƒ€์ผ๋ง์ด scss๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์ด ์„ค์น˜ํ•ด์ฃผ์—ˆ๋‹ค.

2. ์›ํ•˜๋Š” ๊ธฐ๋Šฅ ์„ค์ •ํ•˜๊ธฐ

ํ™˜๊ฒฝ ์„ค์ •์ด ์™„๋ฃŒ๋˜๋ฉด

import React from 'react';
import { Swiper, SwiperSlide } from "swiper/react";
import SwiperCore, { Pagination } from "swiper";

import "swiper/swiper.scss";
import "swiper/components/pagination/pagination.scss";

SwiperCore.use([Pagination]);

function SwiperComponent() {
  return (
    <Swiper
      style={{height:"373px"}}
      className="swiper-container"
      spaceBetween={50}
      slidesPerView={1}
      pagination={{clickable: true}}
     >
       <SwiperSlide className="swiper-slide">
         <img />
       </SipwerSlide>
     </Swiper>
  );
}

export default SwiperComponent;

๊ธฐ๋ณธ์ ์œผ๋กœ Swiper์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ค ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ์‹ธ์•ผํ•˜๊ณ 
๊ทธ ์•ˆ์— ๋“ค์–ด๊ฐˆ content๋“ค์€ SwiperSlide์— ๋‹ด์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค.
๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ด๋ฏธ scss๋กœ ์Šคํƒ€์ผ๋ง๋œ ๊ฒƒ๋“ค์ด ์ ์šฉ๋œ๋‹ค.

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์˜ต์…˜๋“ค๋งŒ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด,

  • spaceBetween : ๊ฐ ์Šฌ๋ผ์ด๋” ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ. ๊ฐœ๋ฐœ์ž ์ฝ˜์†”๋กœ ๋ณด๋ฉด props์— ์ž…๋ ฅ๋œ ์ˆซ์ž๊ฐ€ margin-right๋กœ ์ถ”๊ฐ€๋˜์–ด์žˆ๋‹ค.
  • slidesPerView : ํ•œ ํŽ˜์ด์ง€์— ๋„ฃ์„ ์Šฌ๋ผ์ด๋“œ ๊ฐฏ์ˆ˜. ๋‚˜๋Š” ์‚ฌ์ง„ ํ•œ์žฅ์”ฉ์„ ๋„˜๊ธฐ๋ฉฐ ๋ณด๊ณ  ์‹ถ์—ˆ๊ธฐ์— 1๋กœ ์„ค์ •ํ–ˆ๋‹ค.
  • pagination : ์Šฌ๋ผ์ด๋” ํ•˜๋‹จ์— ํŽ˜์ด์ง€ ๊ฐฏ์ˆ˜๋Œ€๋กœ ์ƒ๊ธฐ๋Š” buttlet button. ๊ธฐ๋ณธ ์Šคํƒ€์ผ๋ง์€ active ์ƒํƒœ์ธ๊ฑด ํŒŒ๋ž€์ƒ‰, ์•„๋‹Œ๊ฑด ํšŒ์ƒ‰ ๋ฒ„ํŠผ์œผ๋กœ ๋˜์–ด์žˆ๋‹ค. ์ธ์Šคํƒ€๊ทธ๋žจ๋„ ๊ทธ๋Ÿฐ ์Šคํƒ€์ผ๋กœ ๋˜์–ด์žˆ๊ธธ๋ž˜ ๋”ฐ๋กœ ์ปค์Šคํ…€ํ•˜์ง€๋Š” ์•Š์•˜๋‹ค.

์ด์™ธ์˜ ๋งŽ์€ ์˜ต์…˜๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ํ•˜๋‹จ์˜ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค :)

3. ๋ฆฌํŒฉํ† ๋ง

์ฒ˜์Œ์—๋Š” SwiperSlide ์•ˆ์— ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋“ค์„ ์ผ์ผ์ด ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ethan์ด map์„ ์ด์šฉํ•ด์„œ ๋ฐฐ์—ด๋กœ ์ข€ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๋ง์—
์ฝ”๋“œ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์ด๋ฆฌ์ €๋ฆฌ ์—ฐ์Šตํ•ด๋ณธ ํ›„ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š”

...
const sliders = [
  {src : "/img/IMG1.png", alt : "slider img1"},
  {src : "/img/IMG2.png", alt : "slider img2"},
  {src : "/img/IMG3.png", alt : "slider img3"}
];
return (
  <Swiper
      style={{height:"373px"}}
      className="swiper-container"
      spaceBetween={50}
      slidesPerView={1}
      pagination={{clickable: true}}
  >
      {sliders.map((slider) => {
        return (
            <SwiperSlide className="swiper-slide" key={slider.src}>
              <SlideImg src={slider.src} alt={slider.alt} />
            </SwiperSlide>
        );
      })}
  </Swiper>

4. ์Šคํƒ€์ผ๋ง

๊ฒฐํ˜ผ์‹ ๋‚ ์งœ์™€ ๋””๋ฐ์ด๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ๋งค์ผ ์ ์šฉ๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ,
๋งˆ๋•…ํ•œ ์œ„์น˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ
swiper์—์„œ ์ฒซ ํŽ˜์ด์ง€์— ์ถ”๊ฐ€ํ•ด์„œ ๋„ฃ๊ธฐ๋กœ ํ–ˆ๋‹ค.
Date๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚ ์งœ ๊ณ„์‚ฐ์„ ํ•˜์˜€๊ณ 

const todayDate = new Date();
todayDate.setHours(0);
todayDate.setMinutes(0);
todayDate.setSeconds(0,0);
const weddingDate = new Date("2021/12/31");

const weddingDay = 
      (weddingDay.getDate() - todayDate.getDate()) / (1000 * 60 * 60 * 24);

SwiperSlide ์ฒซ ํŽ˜์ด์ง€์— position:absolute๋กœ ์‚ฌ์ง„ ์ƒ๋‹จ์— ๋ถ™ํ˜€๋ฒ„๋ ธ๋‹ค.

5. ๊ฒฐ๊ณผ๋ฌผ

๋•๋ถ„์— ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

profile
์‰ฝ๊ฒŒ ์‚ฌ๋Š”๊ฑด ์žฌ๋ฏธ๊ฐ€ ์—†๋”๊ตฐ์š”, ์ƒˆ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค๐Ÿค“

0๊ฐœ์˜ ๋Œ“๊ธ€