[TIL/React] 2023/08/23

원민관·2023λ…„ 8μ›” 23일
0

[TIL]

λͺ©λ‘ 보기
102/159

src/pages/EventPage.js 🟑

import React, { useState } from "react";
import styled from "styled-components";
import { events } from "../data/EventList";

const CardContainer = styled.div`
  display: flex;
  overflow-x: scroll;
  width: 100%;
  height: 200px;
  cursor: grab;
  background-color: #424242;
`;

const Card = styled.div`
  height: 100%;
  margin: 30px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 20px;
  transition: transform 0.3s ease;

  &:hover {
    transform: scale(1.1);
    cursor: pointer;
  }
`;

const EventCardWrapper = styled.div``;

const EventCardImg = styled.img`
  width: 400px;
  height: 400px;
`;

const EventPage = () => {
  const [isMousePressed, setIsMousePressed] = useState(false);
  const [containerScrollLeft, setContainerScrollLeft] = useState(0);
  const [startMouseX, setStartMouseX] = useState(0);

  const handleMousePress = (e) => {
    setIsMousePressed(true);
    setStartMouseX(e.pageX - e.currentTarget.offsetLeft);
    setContainerScrollLeft(e.currentTarget.scrollLeft);
    console.log(e.currentTarget.scrollLeft);
  };

  const handleMouseMove = (e) => {
    if (!isMousePressed) return;
    const currentMouseX = e.pageX - e.currentTarget.offsetLeft;
    e.currentTarget.scrollLeft =
      containerScrollLeft - (currentMouseX - startMouseX);
  };

  const handleMouseRelease = () => setIsMousePressed(false);

  return (
    <CardContainer
      style={{ height: "1000px" }}
      onMouseDown={handleMousePress}
      onMouseMove={handleMouseMove}
      onMouseUp={handleMouseRelease}
      onMouseLeave={handleMouseRelease}
    >
      {events?.map((event) => (
        <Card key={event.id}>
          <EventCardWrapper>
            <EventCardImg src={event.image} alt={event.title} />
            <h3
              style={{
                color: "rgb(255, 255, 255)",
                fontWeight: "bolder",
                textAlign: "center",
              }}
            >
              {event.title}
            </h3>
            <p
              style={{
                color: "rgb(155, 155, 155)",
                fontWeight: "bolder",
                textAlign: "center",
              }}
            >
              {event.subtitle}
            </p>
          </EventCardWrapper>
        </Card>
      ))}
    </CardContainer>
  );
};

export default EventPage;

src/data/EventList.js 🟑

import { eventImg } from "../images";

export const events = [
  {
    id: "1",
    image: eventImg.eventImg1,
    title: "2023 여름 μ„ λ¬Όμ„ΈνŠΈ",
    subtitle:
      "μ–Όλ¦¬λ²„λ“œ κΈ°κ°„, μ΅œλŒ€ 7% ν• μΈλœ κ°€κ²©μœΌλ‘œ μ΄ˆμ‹ μ„ ν•œ κ°μ‚¬μ˜ λ§ˆμŒμ„ μ „ν•˜μ„Έμš”!",
  },
  {
    id: "2",
    image: eventImg.eventImg2,
    title: "ν‘Έμ§ν•œ 바베큐 νŒŒν‹° 이벀트",
    subtitle: "μ΅œλŒ€ 15,000원 할인받고 ν‘Έμ§ν•œ 바베큐 νŒŒν‹°λ₯Ό μ€€λΉ„ν•˜μ„Έμš”!",
  },
  {
    id: "3",
    image: eventImg.eventImg3,
    title: "친ꡬ μ΄ˆλŒ€ 이벀트",
    subtitle: "즐거운 μΌμƒμ˜ λ³€ν™” 'μ΄ˆμ‹ μ„ '을 μ†Œμ€‘ν•œ μ‚¬λžŒμ—κ²Œ μ•Œλ €μ£Όμ„Έμš”!",
  },
  {
    id: "4",
    image: eventImg.eventImg4,
    title: "μ•± μ„€μΉ˜ 이벀트",
    subtitle: "μ •μœ‘κ° μ•± μ„€μΉ˜ν•˜κ³  μ΄ˆμ‹ μ„ ν•œ 일상을 λˆ„λ €λ³΄μ„Έμš”!",
  },
  {
    id: "5",
    image: eventImg.eventImg5,
    title: "μƒν’ˆ 리뷰 ν˜œνƒ",
    subtitle: "λ§Œμ‘±ν•˜μ‹  λ§ˆμŒμ„ λ‹΄μ•„ μƒν’ˆ 리뷰λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.",
  },
  {
    id: "6",
    image: eventImg.eventImg6,
    title: "μ‹ μ„ ν”Œλžœ 배솑 ν˜œνƒ",
    subtitle: "ν•œ 번 λ°°μ†‘λΉ„λ‘œ 4회 λ¬΄λ£Œλ°°μ†‘",
  },
  {
    id: "7",
    image: eventImg.eventImg1,
    title: "2023 여름 μ„ λ¬Όμ„ΈνŠΈ",
    subtitle:
      "μ–Όλ¦¬λ²„λ“œ κΈ°κ°„, μ΅œλŒ€ 7% ν• μΈλœ κ°€κ²©μœΌλ‘œ μ΄ˆμ‹ μ„ ν•œ κ°μ‚¬μ˜ λ§ˆμŒμ„ μ „ν•˜μ„Έμš”!",
  },
  {
    id: "8",
    image: eventImg.eventImg2,
    title: "ν‘Έμ§ν•œ 바베큐 νŒŒν‹° 이벀트",
    subtitle: "μ΅œλŒ€ 15,000원 할인받고 ν‘Έμ§ν•œ 바베큐 νŒŒν‹°λ₯Ό μ€€λΉ„ν•˜μ„Έμš”!",
  },
  {
    id: "9",
    image: eventImg.eventImg3,
    title: "친ꡬ μ΄ˆλŒ€ 이벀트",
    subtitle: "즐거운 μΌμƒμ˜ λ³€ν™” 'μ΄ˆμ‹ μ„ '을 μ†Œμ€‘ν•œ μ‚¬λžŒμ—κ²Œ μ•Œλ €μ£Όμ„Έμš”!",
  },
  {
    id: "10",
    image: eventImg.eventImg4,
    title: "μ•± μ„€μΉ˜ 이벀트",
    subtitle: "μ •μœ‘κ° μ•± μ„€μΉ˜ν•˜κ³  μ΄ˆμ‹ μ„ ν•œ 일상을 λˆ„λ €λ³΄μ„Έμš”!",
  },
  {
    id: "11",
    image: eventImg.eventImg5,
    title: "μƒν’ˆ 리뷰 ν˜œνƒ",
    subtitle: "λ§Œμ‘±ν•˜μ‹  λ§ˆμŒμ„ λ‹΄μ•„ μƒν’ˆ 리뷰λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.",
  },
  {
    id: "12",
    image: eventImg.eventImg6,
    title: "μ‹ μ„ ν”Œλžœ 배솑 ν˜œνƒ",
    subtitle: "ν•œ 번 λ°°μ†‘λΉ„λ‘œ 4회 λ¬΄λ£Œλ°°μ†‘",
  },
];

src/images/index.js 🟑

import logo from "./logo.jpeg";
import backgroundImg from "./background.png";
import termsImg from "./terms.jpeg";
import porkImg from "./porkbelly-fresh-list.png";
import chickenImg from "./chickef-cut-list.png";
import porkcutletImg from "./porkcutlet-sirloin-list.png";
import eggImg from "./egg-fresh-list.png";
import milkImg from "./milk-fresh-list.png";
import hanuroundImg from "./baby-hanuround-bmix-list.png";
import carthegardenImg from "./carthegarden.jpeg";
import eventImg1 from "./eventImg1.png";
import eventImg2 from "./eventImg2.png";
import eventImg3 from "./eventImg3.png";
import eventImg4 from "./eventImg4.png";
import eventImg5 from "./eventImg5.png";
import eventImg6 from "./eventImg6.png";

const eventImg = {
  eventImg1,
  eventImg2,
  eventImg3,
  eventImg4,
  eventImg5,
  eventImg6,
};

export {
  logo,
  backgroundImg,
  termsImg,
  porkImg,
  chickenImg,
  porkcutletImg,
  eggImg,
  milkImg,
  hanuroundImg,
  carthegardenImg,
  eventImg,
};

ν˜„μž¬ λͺ¨μŠ΅ 🟑

hover되면 μ•½κ°„ 컀진닀.

회고 🟒

'이상도 μ΄ν•˜λ„ μ•„λ‹ˆλ‹€'λΌλŠ” ν‘œν˜„μ€ κ³ΌλŒ€ν‰κ°€μ™€ κ³Όμ†Œν‰κ°€λ₯Ό λ§‰μœΌλ €λŠ” μ˜λ„λ‘œ 자주 μ‚¬μš©ν•œλ‹€. '이적의 단어듀'μ΄λΌλŠ” μ±…μ—μ„œλŠ” ν•΄λ‹Ή ν‘œν˜„μ΄, 싀상 아무것도 λ§ν•˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ λŒ€λΆ€λΆ„μ΄λΌ, λ©€μ©‘ν•œ λ¬Έμž₯에 μƒνˆ¬μ μœΌλ‘œ λ¬΄μ˜λ―Έν•œ 단어듀을 λ§λΆ™μ΄λŠ” 민망슀러운 말μž₯λ‚œμ΄λΌκ³  μ„œμˆ ν•œλ‹€.

μš°λ¦¬λŠ” '이상도 μ΄ν•˜λ„ μ•„λ‹ˆλ‹€'λΌλŠ” ν‘œν˜„μ„ μ‚¬μš©ν•  λ•Œ, κ³ΌλŒ€ν‰κ°€λ˜κΈ° μ‰¬μš΄ λŒ€μƒμ˜ κ°€μΉ˜λ₯Ό νŠΉμ • 기쀀점에 κ³ μ •ν•˜λŠ” 역할에 μ§‘μ€‘ν•œλ‹€. 반면 κ³Όμ†Œν‰κ°€λ˜λŠ” λŒ€μƒμ„ μ˜Ήν˜Έν•˜λŠ” 역할은 λ“±ν•œμ‹œν•˜λŠ” κ²½ν–₯이 μžˆλ‹€.

λ¬΄μ˜λ―Έν•œ 말μž₯λ‚œκΉŒμ§€λŠ” μ•„λ‹ˆλΌκ³  μƒκ°ν•œλ‹€. μŠ€μŠ€λ‘œμ— λŒ€ν•œ(ν˜Ήμ€ 무엇인가에 λŒ€ν•œ) 평가가 μ•Όλ°•ν•΄μ§ˆ λ•Œ κ³Όμ†Œν‰κ°€λ₯Ό λ§‰μ•„μ€ŒμœΌλ‘œμ¨ λ©˜νƒˆμ„ μ μ •μ„ μœΌλ‘œ μœ μ§€ν•΄ μ€€λ‹€. λ‚΄ 생각 κ·Έ 이상도 μ΄ν•˜λ„ μ•„λ‹ˆλ‹€.

profile
Write a little every day, without hope, without despair ✍️

0개의 λŒ“κΈ€