์ƒˆ์†Œ์‹

Project : Together Sports

[์›น ํ”„๋กœ์ ํŠธ] ๋ฆฌ์•กํŠธ๋กœ Carousel(Slider) ์Šคํฌ๋กค ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

  • -
728x90

 

๐ŸŽˆ ์™œ ์Šคํฌ๋กค ํ˜•์‹์œผ๋กœ?

์—ฌ๋Ÿฌ ๋ฐฉ์‹์„ ๊ณ ์•ˆํ•ด๋ดค๋Š”๋ฐ, ํ•œ ๋ทฐ์— ํ•˜๋‚˜ ๋˜๋Š” 2๊ฐœ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šฐ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์ง€ ์•Š๊ณ 
๊ฐ€์žฅ ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

 

๐ŸŽˆ ๊ตฌํ˜„ ๋ฐฉ์‹

const currentRef = useRef(null);

const next = (ref) => {
    const offsetX = ref.current.offsetWidth;

    ref.current.scrollBy(offsetX, 0);
};

<button onClick={() => next(currentRef)}></button>

<div ref={currentRef}/>

React Hook์˜ useRef๋ฅผ ์ด์šฉํ•˜์—ฌ ์บ๋Ÿฌ์…€ ์ „์ฒด ์˜์—ญ์„ ์ €์žฅํ•˜๊ณ ,
๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด offsetWidth๋กœ ํ˜„์žฌ ๋ณด์ด๋Š” ์˜์—ญ์˜ width๋ฅผ ์–ป์–ด์„œ
๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ทธ ๋งŒํผ์„ +๋กœ ์˜ฎ๊ธฐ๋ฉด ์™„์„ฑ!
(css๋Š” ์ƒ๋žตํ–ˆ์ง€๋งŒ scrollX๋Š” hidden์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ์›ํ•˜๋Š” ๋Š๋‚Œ์ด ์‚ฐ๋‹ค)

์ •๋ง ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ง ๋””ํ…Œ์ผํ•œ(๋ทฐ์— ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋งŒํผ๋งŒ ๋”ฑ๋”ฑ ๋Š์–ด์„œ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š” ๋“ฑ)
์š”๊ตฌ์‚ฌํ•ญ์ด ํ•„์š”ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์ด ๋ฐฉ์‹์œผ๋กœ ๊ฐ„๋‹จํ•œ ์Šฌ๋ผ์ด๋”๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค.

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.