drag and drop ๊ธฐ๋ฅ์ ๊ตฌํํด์ ๋น์ฐํ๋ค๋ ๋ฏ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ์ผ๋๋ฐ, ์ฌ๊ฑธ -
๊ฐ๋ก๋ก ์์ง์ด๋ ์ฌ๋ผ์ด๋ ๊ตฌํ์ ํ๊ณ ๊ทธ ์์ ๋ณด์ฌ์ง๋ ๋ถ๋ถ์ ์๋์๋ก ์คํฌ๋กค์ด ๋์ด์ผ ํ๋ค.
๊ฒ๋ค๊ฐ ์น์ฑ์ธ์ง๋ผ ํฐ์น๋ก ๋๋๊ทธ๊น์ง ๋์ผํ๋ ์ํฉ์ด์๋ค.
์ฒ์์ ๊ตฌํํ์ ๋๋ siwper๋ผ๋ ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ , ์ฌ๋ผ์ด๋ ์์ชฝ ๋ถ๋ถ์๋ ๋ค๋ฅธ ๋๋๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ ์งํํ๋๋ฐ, ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์์ ์ ๋๋ก ๊ตฌํ์ ํ ์๊ฐ ์์๋ค.
๊ฐ๋จํ๊ฒ ์ฌ์ ๋ฅผ ์ด์ผ๊ธฐํด๋ณด์๋ฉด, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊น์ง ์ถฉ๋์ ํ๋ค. ๊ฐํธํ๊ฒ ์ฐ์๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๋๋ฐ ์๋ก ์ถฉ๋ํด์ ๋์ฅํ์ด ๋๋ค.
์ถฉ๋ ์๋๋๊ฑธ ์ฐพ์๋๋ ๊ฐ๋ก ์ฌ๋ผ์ด๋ ๊ตฌํ์ ๋์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋ ๋ง์ฐ์ค ์ด๋ฒคํธ๋ฅผ ๋ค ๋บ์ด๊ฐ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋จนํ์ง ์๋ ์ผ๋ ๋ฐ์ํ๋ค. ๊ฒฐ๊ตญ์ ํ๋ํ๋ ๋ค ์ฝ๋๋ฅผ ์จ์ผ ํ๋ ์ํฉ์ด ๋์๋ค.
๋ ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๊ฒ๋ง ๊ธฐ๋ ์ ์๋ ์ํฉ์ด ์๋ค!!!!!!
๐ฆ ๊ตฌํํด์ผํ๋ ๊ธฐ๋ฅ
1. ๊ฐ๋ก / ์ธ๋ก ๋ง์ฐ์ค ๋๋๊ทธ & ํฐ์น ๋๋๊ทธ ์บ๋ฌ์ ์ด ๋์ด์ผ ํ๋ค. (์ด๋, ๊ฐ๋ก / ์ธ๋ก ์คํฌ๋กค์ด ์ ์ฉ๋์ผ ํ DOM์ ์๋ก ๋ค๋ฅด๋ค)
2. ์ผ์ ํ ์์น์ ๋ ๋์ด์์ ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ค์ ํ์ด์ง๋ก ๋์ด๊ฐ์ผํ๋ค.
3. ์ธ๋ก๋ก ์คํฌ๋กค ํ ๋๋ api๋ก ๋ค์ ํ์ด์ง ์๋ฃ๋ฅผ ๋ถ๋ฌ์์ผ ํ๋ค.
4. ๋ชจ๋ฐ์ผ์์๋ ์๋์ด ๊ฐ๋ฅํด์ผํ๋ค.
๐ ๏ธ ์ด๋ป๊ฒ ํด๊ฒฐํ๋?!
์ ์ผ ๋ฐ๊นฅ์ชฝ ์ฌ๋ผ์ด๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ์ง ์๊ณ ์ฌ๋ผ์ด๋๋ฅผ ๋ง๋ค์ด์ ์งํ์ ํ๊ณ ,
์์ชฝ ์ฌ๋ผ์ด๋ ํ์ด์ง ์ชฝ์๋ ๋๋๊ทธ๊ฐ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์ผ๋ค๊ฐ ๋๋ฌด ๋ณต์กํด์ ธ์ draggable ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉ์์ผฐ๋ค.
์๋๋ ๋ฐ๊นฅ์ชฝ ์ฌ๋ผ์ด๋๊ฐ ๋ชจ๋ ๋ง์ฐ์ค ์ด๋ฒคํธ๋ฅผ ์์๊ฐ๋์ง๋ผ. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ชฝ ๋ทฐ์๋ง ์ ์ฉ!
ํ์ง๋ง ๋ฌธ์ ๋ ์ด์ ์์ํ๊ฒ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ง๋๊ฐ ๋ฌธ์ ์๋ค.
ํ์ฐธ์ ๊ฒ์์ ํ๋ค๊ฐ ์ ๋ง ํ๋ฅญํ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๋ค!!
์ ๋ง ๋ง์ ๋์์ ๋ฐ์ ๋ธ๋ก๊ทธ๋ค! https://velog.io/@bepyan/Drag-Carousel-%EB%BD%80%EA%B0%9C%EA%B8%B0
๊ฐ๋ฐ์๋ ๊ฐ์ฌํด์ ใ ใ ใ ์ฌ๋ ํ๋ ์ด๋ฆฌ์ จ์ด์.
๐ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ง์
์์ ์ฌ๋ ค๋์ ์ฐธ๊ณ ์๋ฃ๋ฅผ ๋ณด๋ฉด ๊ธฐ๋ฅ ๊ตฌํ์ ๊ฐ๋ฅํฉ๋๋ค. ๋ฌผ๋ก ์ฝ์ง ์์์. ์ ๋ ๋ฌด์์ ๋ฐ๋ผํ ์ฝ๋์ฌ์ ์ด๊ฒ ์ ์ด๋ ๊ฒ ์ ๊ฒ ์ ์ด๋ฐ์ง์ ๋ํ ์ดํด๋๊ฐ ์๋นํ ๋จ์ด์ก์ต๋๋ค. ๊ทธ๋์ ํ์ฌ ์ด ํฌ์คํ ์ ์ฌ๋ฆฌ๋ ์ด์ ์ด๊ธฐ๋ ํ!!! ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ํ ์ฌ์ ์ง์ ๋ ธํธ๋ฅผ ์ ๋ฆฌํด ๋ด ๋๋ค.
MouseEvent๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์์น๋ฅผ ์ฐ์ ์์ฑ ์ ๋ฆฌ
x, clientX | ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ ์๋ฆฌ๋จผํธ ๊ธฐ์ค์ผ๋ก ์์น ์ฐ์ |
pageX | ํ์ด์ง ๋คํ๋จผํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น ์ฐ์ |
screenX | ๋์ผ ๋ชจ๋ํฐ์ ์ฃผ ๋ชจ๋ํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น ์ฐ์ |
TouchEvent / MouseEvent
๋ชจ๋ฐ์ผ๊ณผ PC ๋ชจ๋์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ event๋ฅผ ๋ ๋ค ์ ์ฉ์์ผ์ค์ผ ํฉ๋๋ค,
MouseEvent๋ ๋ง์ด ๋ค์ด๋ณธ ์ด๋ฒคํธ์ด์ค ๊ฒ๋๋ค.
๋คํํ๋ ๋ ๊ฐ์ง๊ฐ ๋น์ทํ ์์ฑ์ ๊ฐ์ง๊ณ ์๋ต๋๋ค
MouseEvent | TouchEvent | ์์ฑ ๋ด์ฉ |
mousedown | touchdown | (๋ง์ฐ์ค) ํด๋ฆญ ์ด๋ฒคํธ |
mousemove | touchmove | (๋ง์ฐ์ค) ์ด๋ ์ด๋ฒคํธ |
mouseup | touched | (๋ง์ฐ์ค) ํด๋ฆญ ํด์ ์ด๋ฒคํธ |
๋ชจ๋ฐ์ผ์ธ์ง pc์ธ์ง ๊ตฌ๋ถ์ ํ๊ธฐ ์ํด์๋ ๋ฏธ๋์ด์ฟผ๋ฆฌ๋ฅผ ์ฐ์
window.matchMedia(๋ถ์ํ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค).matches
์๋ฅผ ๋ค๋ฉด window.matchMedia("(min-width:400px)"). matches
๋ฅผ ์ฐ๋ฉด ๋ทฐ ํฌํธ ๋๋น๊ฐ 400ํฝ์ ์ด์์ธ ๊ฒ๋ค ์๋ ๊ฒ๋ค ์ด๋ ๊ฒ ์กฐ๊ฑด๋ถ๋ก ๋๋ ์ ์ฝ๋๋ฅผ ์ธ ์ ์๋ค.
์ด ๋ ๊ฐ์ง๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๋ถ์๊ฐ ํน๋ณํ๊ฒ ์๋ ๊ฒ์ ์๋์ง๋ง hover์ pointer ๊ธฐ๋ฅ์ผ๋ก ๊ตฌ๋ถํด๋ณผ ์ ์๋ค๊ณ ํฉ๋๋ค.
1. Hover
Hover(ํธ๋ฒ) ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ ํฌ์ธํ ์ฅ์น๋ก ์น์์์๋ ๋ง์ฐ์ค๋ก ํํ์ด ๋๋๋ฐ, none ์ด๋ hover ๋๊ฐ์ง ๊ฐ์ด ์ง์๋ฉ๋๋ค.
none์ ์ฃผ ํฌ์ธํ ์ฅ์น๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ง์ฐ์ค ๊ฐ์๊ฑฐ์. ํฐ์น์คํฌ๋ฆฐ + ๋ง์ฐ์ค์ง์๋๋ ์ฅ์น ์ญ์ none์ผ๋ก ํํ๋ฉ๋๋ค.
hover๋ ๋ํ์ ์ผ๋ก ๋ง์ฐ์ค๊ฐ์ ์ฅ์น๊ฐ ํน์ ์๋ฆฌ๋จผํธ ์๋ก ํธ๋ฒ ํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค.
2. Pointer
๋ง์ฐ์ค ํฌ์ธํ ๋ถ๋ถ์ ๋งํ๋ค๊ณ ํ๋ฉด ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
coarse ์ ํ๋๊ฐ ์ ํ๋ ํฌ์ธํ ์ ์ด์ผ๊ธฐํฉ๋๋ค. ํฐ์น์คํฌ๋ฆฐ ๋ชจ์ ๊ฐ์ง ์ผ์ค ๊ฐ์ ๋๋์ผ๋ก์
fine ์ ํํ ํฌ์ธํ ์ฅ์น๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ง์ฐ์ค, ํน์ ํฐ์นํจ๋์ ๊ฐ์ ๊ฒ๋ค์ด ํด๋นํฉ๋๋ค,
๊ทธ๋์ ์ ์ ๊ฒฝ์ฐ์๋ hover๋ none ๊ฐ์ pointer๋ coarse ๊ฐ ๋๋ฉด ๋ชจ๋ฐ์ผ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ผ๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค
์ฐธ๊ณ ์๋ฃ
https://paperblock.tistory.com/164
โจ react-indiana-drag-scroll ์ฌ์ฉ
์ธ๋ก ์คํฌ๋กค๋ง ๋ค์ด๊ฐ์ผํ๋ ์์ชฝ view ํ์ด์ง์ ์ ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ!
properties๊ฐ ๋ค์ํ๊ฒ ์์ด์ ํ์ํ ๊ฒ๋ง ์ฌ์ฉํด์ ์ฐ๊ธฐ ์ข๋ค.
'๊ฐ๋ฐ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฆฌ์กํธ] useNavigate๋ก props ์ ๋ฌ & useLocation ์ผ๋ก ๋ฐ๊ธฐ (0) | 2023.11.14 |
---|---|
[Redux] Redux toolkit ๊ธฐ์ด ์ฝ๋ ์ ๋ฆฌ (0) | 2023.11.10 |
[react/typescript] Swiper ์ฌ์ฉ๊ธฐ (2) | 2023.10.29 |
๐ฅฒ ์๋, ์ด๊ฒ ์ ์ ๋๋๊ฑฐ์ผ?!?! - ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ๊ณผ Promise์ ๋ํ์ฌ (0) | 2023.09.10 |
[๋ฆฌ์กํธ] React-Query - 2. CacheTime , StaleTime (feat.ReactQueryDevtools) (0) | 2023.05.09 |