แ„‰แ…ณแ„‹แ…ชแ„‹แ…ตแ„‘แ…ณ.gif

์‹œ์„ธํŽ˜์ด์ง€ โ€œ๐Ÿ‘€ย ๋‚ด ์ž‘๋ฌผ ์‹œ์„ธ๋ฅผ ํ•œ ๋ˆˆ์—" ํƒญ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋“ฑ๋กํ•ด๋†“์€ ์ž‘๋ฌผ ์ „์ฒด ์ฐจํŠธ๋ฅผ ์Šค์™€์ดํ”„๋กœ ๋„˜๊ธฐ๋ฉฐ ํ•œ ๋ˆˆ์— ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ผ์ •์ƒ 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>
     ...
 )
}

useRef ์‚ฌ์šฉํ•˜์—ฌ DOM ์ ‘๊ทผ

1๏ธโƒฃย ์ขŒ์šฐ ์Šฌ๋ผ์ด๋“œ ์Šคํฌ๋กค์˜ ์›€์ง์ž„์€ ํ•ด๋‹น DOM์˜ย scrollLeft๋กœ ์›€์ง์ž„. ย scrollLeft๋ฅผ ์–ป๊ธฐ ์œ„ ํ•ดย useRef๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM์— ์ ‘๊ทผ


์ด๋ฒคํŠธ


๋ณ€์ˆ˜

1๏ธโƒฃ DOM.scrollWidth์Šคํฌ๋กค ํ•  ์ˆ˜ ์žˆ๋Š” ์ด ๊ธธ์ด

2๏ธโƒฃ DOM.clientWidth์„ค์ •ํ•œ max width ( ํ™”๋ฉด์— ๋ณด์ด๋Š” ์Šคํฌ๋กค์˜ ๊ธธ์ด )

3๏ธโƒฃ DOM.scrollLeft์Šคํฌ๋กค ๊ฐ€์žฅ ์™ผ์ชฝ (DOM.scrollLeft = 0ย ) ๋ถ€ํ„ฐ ์ด๋™ํ•œ ์Šคํฌ๋กค ๊ธธ์ด,์ฆ‰ย DOM.scrollLeftย ๊ธธ์ด๋งŒํผ ์Šคํฌ๋กค ์ด๋™