Skip to content

Commit 0773baf

Browse files
authored
Merge pull request #124 from codeit-maso/feature/jeon
🐛 fix: 카드에서 드래그가 클릭으로 인식되는 현상
2 parents c3187a6 + 58254be commit 0773baf

File tree

3 files changed

+39
-25
lines changed

3 files changed

+39
-25
lines changed

src/components/Carousel/Carousel.jsx

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,14 @@
11
import { useState, useEffect } from 'react';
22
import styles from './Carousel.module.scss';
33
import RecipientCard from '../RecipientCard/RecipientCard';
4+
import useWindowWidth from '../../hooks/useWindowWidth';
45

56
export default function Carousel({ recipients }) {
67
const [index, setIndex] = useState(0);
7-
const [offsetX, setOffsetX] = useState({}); // x좌표
8-
const [startX, setstartX] = useState(0); // 클릭 시작 좌표 - 터치 스크롤
8+
const [offsetX, setOffsetX] = useState({}); // 캐러셀 x좌표
9+
const [startX, setstartX] = useState(0); // 터치 스크롤 시작 x좌표
910
const [isBouncing, setBouncing] = useState(false); // 캐러셀 끝이면 bouncing 모션
10-
const [windowWidth, setWindowWidth] = useState(window.innerWidth);
11-
const isDesktop = windowWidth > 1200;
12-
13-
useEffect(() => {
14-
function handleResize() {
15-
setWindowWidth(window.innerWidth);
16-
}
17-
window.addEventListener('resize', handleResize);
18-
return () => {
19-
window.removeEventListener('resize', handleResize);
20-
};
21-
}, []);
11+
const isDesktop = useWindowWidth() > 1200;
2212

2313
// 캐러셀 버튼 작동과정: button onclick --> settingIndex(), setIndex --> useEffect( setOffsetX(),[index] ): x좌표 상태 업데이트: 캐러셀 이동
2414
useEffect(() => {
@@ -48,7 +38,7 @@ export default function Carousel({ recipients }) {
4838

4939
if (!isNext) {
5040
if (index === 0) {
51-
setBouncing(true); //캐러셀 끝 -> setBounce(띠용)
41+
setBouncing(true);
5242
return;
5343
} else if (index > 0) {
5444
settingIndex('back');
Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
import { useState } from 'react';
2+
import { useNavigate } from 'react-router-dom';
13
import styles from './RecipientCard.module.scss';
24
import RecentMessages from '../RecentMessages/RecentMessages';
35
import TopReactions from '../TopReactions/TopReactions';
4-
import { useNavigate } from 'react-router-dom';
56

6-
//캐러셀 내부 요소 - 카드 컴포넌트
77
export default function RecipientCard({ Recipient }) {
88
const {
99
id,
@@ -15,6 +15,13 @@ export default function RecipientCard({ Recipient }) {
1515
backgroundImageURL,
1616
} = Recipient;
1717
const navigate = useNavigate();
18+
const [isDragging, setIsDragging] = useState(false);
19+
20+
function handleCardClick() {
21+
if (!isDragging) {
22+
navigate(`/post/${id}`);
23+
}
24+
}
1825

1926
return (
2027
<div
@@ -26,24 +33,27 @@ export default function RecipientCard({ Recipient }) {
2633
}
2734
: {}
2835
}
29-
onClick={() => navigate(`/post/${id}`)}
36+
onClick={handleCardClick}
37+
onMouseDown={() => setIsDragging(false)}
38+
onTouchStart={() => setIsDragging(false)}
39+
onMouseMove={() => setIsDragging(true)}
40+
onTouchMove={() => setIsDragging(true)}
3041
>
3142
{backgroundColor === 'blue' && <div className={styles.triangle} />}
3243
<h3
3344
className={`${styles['card__h3']} ${backgroundImageURL ? styles.white : ''}`}
34-
>{`To. ${name}`}</h3>
35-
<RecentMessages
36-
messages={recentMessages}
37-
count={messageCount}
38-
></RecentMessages>
45+
>
46+
{`To. ${name}`}
47+
</h3>
48+
<RecentMessages messages={recentMessages} count={messageCount} />
3949
<div
4050
className={`${styles['card__writer-count']} ${backgroundImageURL && styles.white}`}
4151
>
4252
<span className={styles['card__count']}>{messageCount}</span>
4353
<span>명이 작성했어요!</span>
4454
</div>
45-
<div className={styles['card__centerline']}></div>
46-
<TopReactions reactions={topReactions}></TopReactions>
55+
<div className={styles['card__centerline']} />
56+
<TopReactions reactions={topReactions} />
4757
</div>
4858
);
4959
}

src/hooks/useWindowWidth.jsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { useState, useEffect } from 'react';
2+
3+
export default function useWindowWidth() {
4+
const [windowWidth, setWindowWidth] = useState(window.innerWidth);
5+
6+
useEffect(() => {
7+
function handleResize() {
8+
setWindowWidth(window.innerWidth);
9+
}
10+
window.addEventListener('resize', handleResize);
11+
return () => window.removeEventListener('resize', handleResize);
12+
}, []);
13+
return windowWidth;
14+
}

0 commit comments

Comments
 (0)