TOAST UI - ํฐ์น์ ํด๋ฆญ ์ด๋ฒคํธ ๊ธ์์ ์๊ธด ์๋ฌธ์ ์ ๋ฆฌํ๊ธฐ ์ํ ๊ธ์ ๋๋ค.

ํฐ์น ์ด๋ฒคํธ๋ฅผ ๋ฌ์๋๋ฐ ์ ํด๋ฆญ ์ด๋ฒคํธ๊น์ง ๋ฐ์ํ๋์?
- ํฐ์น๊ฐ ๋ฐ์ํ๋ฉด ๋ด๊ฐ ๋ณ๋๋ก ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋ฌ์ง ์์์ด๋ click ์ด๋ฒคํธ๊ฐ ์ค๋ณต์ผ๋ก ๋ฐ์ํด ๋ฒ๋ฆฝ๋๋ค.
์ ์ด๋ฐ ๋์์ด ์ผ์ด๋๋ ๊ฑธ๊น์? - ์น์ ์ค๋ซ๋์ ๋ง์ฐ์ค ํด๋ฆญ ์ค์ฌ์ผ๋ก ์ค๊ณ๋๊ณ ๋ฐ์ ํ์ต๋๋ค.
- ์ง๊ธ๊น์ง ๋ง์ ์ฌ์ดํธ๊ฐ ์ค์ง click ์ด๋ฒคํธ๋ง ๋ฃ๊ณ ๋์ํ๋๋ก ๋ง๋ค์ด์ ธ ์๊ธฐ ๋๋ฌธ์, ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ๋ ํธํ์ฑ ์ ์ง๋ฅผ ์ํด ํฐ์น ์ ์๋์ผ๋ก click ์ด๋ฒคํธ๋ ํจ๊ป ๋ฐ์์ํค๋๋ก ์ค๊ณ๋ผ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ํฐ์น์คํฌ๋ฆฐ ํ๊ฒฝ์์๋ ๊ธฐ์กด ๋ง์ฐ์ค ์ค์ฌ ์ฌ์ดํธ๋ค์ด ๋ณ๋ ์์ ์์ด ๋์ํ ์ ์์ต๋๋ค.
ํฐ์น ์ด๋ฒคํธ ํ click ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ๊ฒ ์ ํธ์์ผ๊น์?
- ์ฌ๋ฌ ์๋ฃ์์ ์ด๊ฑธ ํธ์๋ผ๊ณ ํ๋๋ฐ ํํ์ด ๋๋ฌด ํฌ๊ด์ ์ผ๋ก ๋๊ปด์ ธ์ ๊ทธ๋ฐ์ง ์ฒ์์๋ ์ดํด๊ฐ ๋์ง ์์์ต๋๋ค. ์๋๋ ์ ๊ฐ ์ฐพ์๋ณธ ํ ์ดํดํ ๋ด์ฉ์
๋๋ค!
- ๋ธ๋ผ์ฐ์ ๋ ์ด ์ฌ์ดํธ๊ฐ ํฐ์น/ํด๋ฆญ ๋ ๋ค ์ง์ํ๋์ง, ์ด๋ค ์์ผ๋ก ์๋ํ๋์ง ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ๊ทธ๋์ ์ผ๊ด์ ์ผ๋ก, ํฐ์น๊ฐ ๋ฐ์ํ๋ฉด ๋ฐ๋์ click ์ด๋ฒคํธ๋ ๊ฐ์ด ๋ฐ์ํ๋๋ก ๋ง๋ค์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ์ ํฌ๊ฐ ๋ง๋ ์ฌ์ดํธ๋ง ๋์ฐ๋ ๊ฒ์ด ์๋๋ผ ์์ฃผ ๋ง์ ์ฌ์ดํธ๋ฅผ ๋์์ ์ง์ํด์ผ ํฉ๋๋ค. ๋ชจ๋ฐ์ผ ๋์ ์ด๊ธฐ์ ๋๋ถ๋ถ ์ค์ง ํด๋ฆญ ์ด๋ฒคํธ๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ํฐ์น ์ด๋ฒคํธ๋ง ๋ฐ์์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ์๋ ์ฌ์ดํธ๋ค์ด ๋ชจ๋ฐ์ผ์์ ๋จนํต์ด ๋ ์ ์๋ค๊ณ ํ๋จํ์ต๋๋ค. ๊ทธ๋์ ํฐ์น ์ ์๋์ผ๋ก ํด๋ฆญ ์ด๋ฒคํธ๋ ๋ฐ์์ํค๋๋ก ์ค๊ณ๋์๊ณ ๊ธฐ์กด ํด๋ฆญ ๊ธฐ๋ฐ ์ฌ์ดํธ์์ ํธํ์ฑ๋ ๋ณด์ฅํฉ๋๋ค.
React ๋ฑ์์๋ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๊น์?
- ๋ง์ด ์ฌ์ฉํ๋ React ๊ธฐ์ค์ผ๋ก ์ฌ๊ธฐ์๋ ๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ ์์ ๋ฉ์ปค๋์ฆ์ ๊ทธ๋๋ก ๋ฐ๋์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ ๋ค์ดํฐ๋ธ ์ด๋ฒคํธ ์์คํ ์ ๊ทธ๋๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ๋์์ด ๋ฐ์ํด์.
- ๋ธ๋ผ์ฐ์ ๊ฐ ํฐ์น ์ด๋ฒคํธ ํ ์๋์ผ๋ก ๋ง์ฐ์ค์ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋๊ฑด React ์ด์ ๋จ๊ณ์์ ์ผ์ด๋ฉ๋๋ค.
- React๋ ๋ธ๋ผ์ฐ์ ์ ๋ค์ดํฐ๋ธ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ธ๋ SyntheticEvent๋ฅผ ์ฌ์ฉํ๊ณ ์์ด์. ํ์ง๋ง ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ์ด๋ฒคํธ ๋์์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด๋ฒคํธ ์์์ ์ฌ์ฉํ์ง๋ง ์ด๊ฑด ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ต์ ํํ๋ ๊ฒ์ด์ง ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ์ด๋ฒคํธ ๋์์ ๋ฐ๊พธ๋๊ฒ ์๋๋๋ค.
- ๊ด๋ จ ํ ๋ก ์ธ GitHub ์ด์ #9809๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด,
- preventDefault() ๋ฌดํจํ: React์ ํฉ์ฑ ์ด๋ฒคํธ์์ e.prevnetDefault()๊ฐ ํด๋ฆญ ์ด๋ฒคํธ ๋ฐฉ์ง์ ์คํจ
- ๋ค์ดํฐ๋ธ DOM API๋ ์๋: addEventListener๋ก ์ง์ ๋ฑ๋กํ๋ฉด preventDefault()๊ฐ ์ ์ ๋์
- ๋ธ๋ผ์ฐ์ ๋ณ ์ฐจ์ด: Chrome, Firefox, Safari์์ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ๋์ (์ถ๊ฐ ํ์ธ์ด ํ์)
- ์์ ๋ด์ฉ์ ๊ด๋ จ ์ด์๋ฅผ ์ง์ ๋ณด๊ณ ์์ธ ๋ด์ฉ๊ณผ ์ด์ ๋ฅผ ํ์ธํด ๋ณด๋๊ฑธ ์ถ์ฒ๋๋ฆฝ๋๋ค!
- ์ด์์์ ์ ์๋ ํด๊ฒฐ์ฑ ๋ค๋ ์งง๊ฒ๋ผ๋ ์ ๋ฆฌํด ๋ณด๊ฒ์ต๋๋ค.
// ๋ฐฉ๋ฒ 1: ๋ค์ดํฐ๋ธ DOM API ์ฌ์ฉ
componentDidMount() {
this.elem.addEventListener('touchstart', e => {
e.preventDefault(); // ์ด๊ฑด ์๋ํจ
});
}
// ๋ฐฉ๋ฒ 2: ํ๋๊ทธ ์ฌ์ฉ
handleTouchStart(event) {
this.hasBeenTouchedRecently = true;
setTimeout(() => {
this.hasBeenTouchedRecently = false;
}, 500);
}
handleMouseDown(event) {
if(this.hasBeenTouchedRecently) {
return; // ํฐ์น ํ ๋ง์ฐ์ค ์ด๋ฒคํธ ๋ฌด์
}
}
๋ทฐํฌํธ ๋ฉํ ํ๊ทธ์ ๋ฐ์คํฌํ/๋ชจ๋ฐ์ผ ๋์ ์ง์์ ๋ฌธ์ ๋ ์์๊น์?
<meta name="viewport" content="width=device-width">
- ์ ์ฝ๋๋ฅผ ๋ฃ์ผ๋ฉด ๋ชจ๋ฐ์ผ์์ ํฐ์น ๋๋ ์ด๊ฐ ์ฌ๋ผ์ง๋๋ค.
- ์ด ํ๊ทธ๋ ๋ชจ๋ฐ์ผ๋ง์ด ์๋๋ผ ๋ฐ์คํฌํ์ ํฌํจํด๋ ๋ฌด๋ฐฉํด์.
ํฐ์น/ํด๋ฆญ ๋๋ ์ด๋ 2025๋ ์๋ ๋๊ฐ์ด ๋ฐ์ํ ๊น์?
- ๊ณผ๊ฑฐ์ 300ms์ ํฐ์น→ํด๋ฆญ ๋๋ ์ด๊ฐ ์์์ง๋ง ํ์ฌ ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ๋ทฐํฌํธ ๋ฉํ ํ๊ทธ๋ CSS ์ธํ ๋ง ์ ํ๋ฉด ๋๋ ์ด ๋ฌธ์ ๋ ๊ฑฐ์ ๋ฐ์ํ์ง ์๊ณ ์์ต๋๋ค.
| ๐ ์ฐธ๊ณ ๋ฌธํ |
| Chrome ๊ฐ๋ฐ์ ๋ธ๋ก๊ทธ - A More Compatible, Smoother Touch |
| quirksmode |
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ดํฐ๋ฌ๋ธ๊ณผ ์ดํฐ๋ ์ดํฐ (0) | 2025.09.09 |
|---|---|
| window.open ์ ์ฌ์ฉํ ๋ ํ์ ์ฐฝ์ ์ฌ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ (0) | 2025.05.09 |
| ์น ์ปดํฌ๋ํธ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ (0) | 2024.11.25 |