์์ธํ์ด์ง โ๐ย ๋ด ์๋ฌผ ์์ธ๋ฅผ ํ ๋์" ํญ์ ์ฌ์ฉ์๊ฐ ๋ฑ๋กํด๋์ ์๋ฌผ ์ ์ฒด ์ฐจํธ๋ฅผ ์ค์์ดํ๋ก ๋๊ธฐ๋ฉฐ ํ ๋์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค.
๊ฐ๋ฐ ์ผ์ ์ react-slick
, swiper
์ ๊ฐ์ ์บ๋ฌ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์
๋ ๊ณ ๋ คํ์ผ๋ ์ค์์ดํ์ ์ญ๋์ ์ธ ์ ๋๋ฉ์ด์
์ด ๋ค์ด๊ฐ๋ฉด ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ , ์ํ๋ ๋ ์ด์์์ผ๋ก ๊ตฌํํ๊ณ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ด ์ง์ ๊ตฌํํ๊ธฐ๋ก ๊ฒฐ์ !
// MarketPrice.js
const MarketPrice = () => {
const scrollRef = useRef(null);
const [isDrag, setIsDrag] = useState(false);
const [startX, setStartX] = useState();
const onDragStart = (e) => {
e.preventDefault();
setIsDrag(true);
setStartX(e.pageX + scrollRef.current.scrollLeft);
};
const onDragEnd = () => {
setIsDrag(false);
};
const onDragMove = (e) => {
if (isDrag) {
const { scrollWidth, clientWidth, scrollLeft } = scrollRef.current;
scrollRef.current.scrollLeft = startX - e.pageX;
if (scrollLeft === 0) {
setStartX(e.pageX);
} else if (scrollWidth <= clientWidth + scrollLeft) {
setStartX(e.pageX + scrollLeft);
}
}
};
return (
...
<MyCropsChartWrap
onMouseDown={onDragStart}
onMouseUp={onDragEnd}
onMouseMove={onDragMove}
onMouseLeave={onDragEnd}
ref={scrollRef}
>
<MyCropsMarketPriceCard checkedInputs={checkedInputs} />
</MyCropsChartWrap>
...
)
}
1๏ธโฃย ์ข์ฐ ์ฌ๋ผ์ด๋ ์คํฌ๋กค์ ์์ง์์ ํด๋น DOM์ย scrollLeft
๋ก ์์ง์. ย scrollLeft
๋ฅผ ์ป๊ธฐ ์ ํดย useRef
๋ฅผ ์ฌ์ฉํ์ฌ DOM์ ์ ๊ทผ
1๏ธโฃ DOM.scrollWidth
์คํฌ๋กค ํ ์ ์๋ ์ด ๊ธธ์ด
2๏ธโฃ DOM.clientWidth
์ค์ ํ max width ( ํ๋ฉด์ ๋ณด์ด๋ ์คํฌ๋กค์ ๊ธธ์ด )
3๏ธโฃ DOM.scrollLeft
์คํฌ๋กค ๊ฐ์ฅ ์ผ์ชฝ (DOM.scrollLeft = 0
ย ) ๋ถํฐ ์ด๋ํ ์คํฌ๋กค ๊ธธ์ด,์ฆย DOM.scrollLeft
ย ๊ธธ์ด๋งํผ ์คํฌ๋กค ์ด๋