Skip to content

Commit 94b1b2b

Browse files
committed
feat: 이미지 호버 시 확대, 축소 기능과 클릭 시 확대/축소 토글 기능 추가
1 parent 6520ad0 commit 94b1b2b

2 files changed

Lines changed: 36 additions & 21 deletions

File tree

src/pages/SignUp/PickMyStyle/index.tsx

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useState } from 'react';
12
import { useNavigate } from 'react-router-dom';
23

34
import theme from '@styles/theme';
@@ -32,25 +33,23 @@ const categories = [
3233
'luxury',
3334
];
3435

35-
// const categoryImages: Record<string, string[]> = {
36-
// classic: ['/images/classic1.jpg', '/images/classic2.jpg'],
37-
// street: ['/images/street1.jpg', '/images/street2.jpg'],
38-
// hip: ['/images/hip1.jpg', '/images/hip2.jpg'],
39-
// casual: ['/images/casual1.jpg', '/images/casual2.jpg'],
40-
// sporty: ['/images/sporty1.jpg', '/images/sporty2.jpg'],
41-
// feminine: ['/images/feminine1.jpg', '/images/feminine2.jpg'],
42-
// minimal: ['/images/minimal1.jpg', '/images/minimal2.jpg'],
43-
// formal: ['/images/formal1.jpg', '/images/formal2.jpg'],
44-
// outdoor: ['/images/outdoor1.jpg', '/images/outdoor2.jpg'],
45-
// luxury: ['/images/luxury1.jpg', '/images/luxury2.jpg'],
46-
// };
47-
4836
const PickMyStyle: React.FC = () => {
37+
const [clickedImages, setClickedImages] = useState<{ [key: string]: boolean }>({});
4938
const navigate = useNavigate();
39+
5040
const navigateToLogin = () => {
5141
navigate('/login');
5242
};
5343

44+
// 특정 이미지 클릭 시 해당 이미지의 상태만 변경
45+
const handleImageClick = (category: string, index: number) => {
46+
const key = `${category}-${index}`;
47+
setClickedImages((prev) => ({
48+
...prev,
49+
[key]: !prev[key], // 클릭할 때마다 상태 변경 (토글 기능)
50+
}));
51+
};
52+
5453
return (
5554
<OODDFrame>
5655
<TopBar LeftButtonSrc={Back} onClickLeftButton={navigateToLogin} />
@@ -76,8 +75,15 @@ const PickMyStyle: React.FC = () => {
7675
# {category}
7776
</StyledCategory>
7877
<ImageContainer>
79-
<PlaceholderImage>이미지 1</PlaceholderImage>
80-
<PlaceholderImage>이미지 2</PlaceholderImage>
78+
{[0, 1].map((index) => (
79+
<PlaceholderImage
80+
key={index}
81+
isClicked={!!clickedImages[`${category}-${index}`]}
82+
onClick={() => handleImageClick(category, index)}
83+
>
84+
이미지 {index + 1}
85+
</PlaceholderImage>
86+
))}
8187
</ImageContainer>
8288
</CategoryItem>
8389
))}

src/pages/SignUp/PickMyStyle/style.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,23 @@ export const ImageContainer = styled.div`
6666
cursor: pointer;
6767
`;
6868

69-
export const PlaceholderImage = styled.div`
69+
export const PlaceholderImage = styled.div<{ isClicked: boolean }>`
7070
width: 12.5rem;
7171
height: 13.75rem;
72-
background: lightgray;
72+
background-color: lightgray;
7373
display: flex;
74-
justify-content: center;
7574
align-items: center;
76-
color: white;
77-
font-weight: bold;
78-
border-radius: 0.3125rem;
75+
justify-content: center;
76+
font-size: 0.875rem;
77+
border-radius: 0.5rem;
78+
transition:
79+
transform 0.2s ease,
80+
box-shadow 0.2s ease;
81+
82+
transform: ${({ isClicked }) => (isClicked ? 'scale(0.9)' : 'scale(1)')};
83+
box-shadow: ${({ isClicked }) => (isClicked ? '0 0.125rem 0.25rem rgba(0, 0, 0, 0.2)' : 'none')};
84+
85+
&:hover {
86+
transform: ${({ isClicked }) => (isClicked ? 'scale(0.9)' : 'scale(0.95)')};
87+
}
7988
`;

0 commit comments

Comments
 (0)