๐Ÿ“Œ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. projectData๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์Šฌ๋ผ์ด๋“œ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์คŒ
  2. ์ขŒ์šฐ ๋ฒ„ํŠผ์„ ์ด์šฉํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Œ
  3. ํ•ด๋‹น ํŽ˜์ด์ง€ ํ•˜๋‹จ์— ๊นƒํ—ˆ๋ธŒ, ๋ฒจ๋กœ๊ทธ ์—ฐ๊ฒฐํ•œ ํ‘ธํ„ฐ ๊ตฌํ˜„ํ•จ

์Šฌ๋ผ์ด๋“œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ๋ฒ„ํŠผ ๋กœ์ง

<aside> ๐Ÿ’ฌ

const [currentIndex, setCurrentIndex] = useState(0);

const handlePrev = () => {
    setCurrentIndex((prevIndex) =>
        prevIndex === 0 ? projectData.length - 1 : prevIndex - 1
    );
};

const handleNext = () => {
    setCurrentIndex((prevIndex) =>
        prevIndex === projectData.length - 1 ? 0 : prevIndex + 1
    );
};

</aside>

ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ

<aside> ๐Ÿ’ฌ

<div
    className="flex transition-transform duration-500 ease-in-out"
    style={{
        transform: `translateX(-${currentIndex * 100}%)`,
        width: "100%",
    }}
>
    {projectData.map((project) => (
        <div
            key={project.id}
            className="w-full flex-shrink-0 px-4 flex justify-center"
        >
            <ProjectItem {...project} />
        </div>
    ))}
</div>

</aside>

์Šฌ๋ผ์ด๋“œ ํ•˜๋‹จ ์ (์ธ๋””์ผ€์ดํ„ฐ)

<aside> ๐Ÿ’ฌ

<div className="flex space-x-2 mt-8">
    {projectData.map((_, index) => (
        <div
            key={index}
            className={`w-3 h-3 rounded-full transition-all duration-300 
                ${currentIndex === index ? "bg-[#68835E]" : "bg-[#FFEDD2] opacity-50"}`}
        ></div>
    ))}
</div>

</aside>