ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [GSAP] scrollTo() ํ•จ์ˆ˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
    Coding 2024. 6. 2. 23:06
    ๋ฐ˜์‘ํ˜•

    scrollTo()

    GSAP์—์„œ ScrollToPlugin์„ ์‚ฌ์šฉํ•ด ๋ธŒ๋ผ์šฐ์ € ์Šคํฌ๋กค์„ ํŠน์ • ์œ„์น˜๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์Šคํฌ๋กคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์šฐ์„  ๊ธฐ๋ณธ์ ์œผ๋กœ gsap๊ณผ ScrollToPlugin์„ ํ”„๋กœ์ ํŠธ์— ๋ถˆ๋Ÿฌ์™€์•ผํ•ฉ๋‹ˆ๋‹ค.

    cdn์„ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.10.4/gsap.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.10.4/ScrollToPlugin.min.js"></script>

     

    ์ฐฝ์„ ์œ„์—์„œ 500px ์œ„์น˜๋กœ ์Šคํฌ๋กค ์ด๋™ํ•˜๋ ค๋ฉด

    ์šฐ์„  'gsap.to()' ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  'scrollTo' ์†์„ฑ์— ์ˆซ์ž 500์„ ๋„ฃ์–ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    gsap.to(window, {duration: 1, scrollTo: 500});

     

    ํŠน์ • ์š”์†Œ๋กœ ์Šคํฌ๋กคํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, '#section2'๋ผ๋Š” ์š”์†Œ๋กœ ์Šคํฌ๋กคํ•˜๋ ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    gsap.to(window, {duration: 1, scrollTo: "#section2"});

     

     

    ์œ„ ์˜ˆ์ œ๋“ค์€ 'window' ์ฆ‰ ๊ธฐ๋ณธ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ์Šคํฌ๋กค์„ ์ปจํŠธ๋กค ํ•˜๋Š”๊ฒƒ์ด๋ผ๋ฉด,

    ์ฐฝ ๋Œ€์‹  ํŠน์ • ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ์—๋„ ํƒ€์ผ“์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    gsap.to("#scrollContainer", {duration: 1, scrollTo: {y: 200}});

     

    ๊ฐ„๋‹จํ•˜๊ฒŒ ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์ง€์†์‹œ๊ฐ„๊ณผ ์ด์ง• ์˜ต์…˜์„ ์กฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    gsap.to(window, {
      duration: 1.5,	// ์Šคํฌ๋กค ์†๋„ ์ˆ˜์ •
      scrollTo: {
        y: "#section2", // #section2 ์š”์†Œ๋กœ ์Šคํฌ๋กค ์ด๋™
        offsetY: 50 // ์š”์†Œ ์œ„ 50ํ”ฝ์…€ ์œ„์น˜๋กœ ์Šคํฌ๋กค
      },
      ease: "power2.inOut"	// ์ด์ง• ์ˆ˜์ •
    });

     


     

    ํ•˜์ง€๋งŒ ์œ„ ์˜ˆ์ œ๋“ค์€ ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋”ฉ๋˜๋ฉด ๋ฐ”๋กœ ์Šคํฌ๋กค์ด ์ด๋™ํ•ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

     

    GSAP์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ฆญ ์‹œ ์Šคํฌ๋กค์ด๋™ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

     

    document.querySelectorAll("nav button").forEach((btn, index) => {	// forEach๋กœ ๋ฒ„ํŠผ๊ณผ ๋ฒ„ํŠผ index๊ฐ’์„ ๊ฐ€์ ธ์˜ด
      btn.addEventListener("click", () => {
        gsap.to(window, {
            duration: 1, 
            scrollTo:{
                y:"#section" + (index + 1), // (index + 1) = ๊ฐ section ๋’ค์— ์ˆซ์ž๋ฅผ ๋œปํ•จ. index๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— +1์„ ํ•ฉ๋‹ˆ๋‹ค.
                offsetY: 70	// section ์ด๋™๋ฒ„ํŠผ์ด ์ƒ๋‹จ fixed๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ทธ ๊ฐ’ 70px์„ offsetY ๊ฐ’์œผ๋กœ ์„ค์ •
            }
        });
      });
    });

     

     

    GSAP์˜ ScrollToPlugin์„ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋กœ ๋ถ€๋“œ๋Ÿฌ์šด ์Šคํฌ๋กค ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋‹ค์Œ๋ฒˆ์—” scrollTo() ํ•จ์ˆ˜์˜ ๋‹ค๋ฅธ ์˜ต์…˜๋“ค์„ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ GSAP ScrollToPlugin ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

JJung-e Tistory.