ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS ํฌํŠธํด๋ฆฌ์˜ค ๋งŒ๋“ค๊ธฐ] ์ƒ๋‹จ๋ฐ” ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์Šคํฌ๋กคํ•˜๊ธฐ
    Mini Projects/make Portfolio 2022. 3. 19. 09:20

    2022.03.18-19

     


    ๐Ÿค”โ“ ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์Šคํฌ๋กค ๋˜๋„๋ก ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค.

    ์ƒ๋‹จ์— ๋‚˜์—ด๋œ ๋ฉ”๋‰ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์Šคํฌ๋กค๋ง ๋˜๋„๋ก ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•œ๋‹ค.

     


    ๐Ÿ˜ƒโ—๋ฉ”๋‰ด ํŽ˜์ด์ง€์˜ ์ขŒํ‘œ๊ฐ’์„ ๊ตฌํ•˜์—ฌ  ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฒ„ํŠผ์— ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค.

     

    0) ๋ฐฉ๋ฒ•๋ก ์„ ์ฐพ์•„๋ณด์ž.

    ์•ž์—์„œ ์Šคํฌ๋กค๋ง์— ๋Œ€ํ•ด ์•Œ์•„๋ด์„œ ๊ทธ๋Ÿฐ์ง€, ํ•ด๋‹น property๋ฅผ ์‘์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹จ ์ƒ๊ฐ์ด ๋“ ๋‹ค.

    element.getBoundingClientRect().y๋ฅผ ์ด์šฉํ•ด ๋ฉ”๋‰ดํŽ˜์ด์ง€๋“ค์˜ y์ขŒํ‘œ๋ฅผ ๊ตฌํ•˜๊ณ , scrollto๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น y๊ฐ’์„ ์—ฐ๊ฒฐ์‹œ์ผœ ์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

     

     

    1) ๊ฐ ๋ฉ”๋‰ด ํŽ˜์ด์ง€์˜ ์ขŒํ‘œ๊ฐ’์„ ๊ตฌํ•˜์ž.

    ๋จผ์ €, about์˜ y์ขŒํ‘œ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด element.getBoundingClientRect().y๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค.

    y๋Š” viewport์—์„œ๋ถ€ํ„ฐ content ์ขŒ์ธก ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ๊นŒ์ง€ ๊ฑฐ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค.

    const about = document.querySelector("#about");
    
    document.addEventListener("scroll", () => {
      console.log(about.getBoundingClientRect().y);
    });

    ์ฝ˜์†”๋กœ ํ™•์ธํ•ด๋ณด๋‹ˆ #about content๊ฐ€ viewport์— ๋‹ฟ์œผ๋‹ˆ ๋”ฑ 0์ด ๋œ๋‹ค. padding์„ ํฌํ•จํ•œ๋‹ค.

     

    ๊ทธ๋Ÿฐ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ ํŽ˜์ด์ง€ ์ƒ๋‹จ์ด ์ƒ๋‹จ๋ฐ”์— ๊ฐ€๋ฆฌ๊ฒŒ ๋จ์œผ๋กœ viewport๋ง๊ณ , ์ƒ๋‹จ๋ฐ”๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŽ˜์ด์ง€๊ฐ€ ์Šคํฌ๋กค๋ง ๋˜์–ด์•ผ ํ•œ๋‹ค. 

    ๊ทธ๋ž˜์„œ, ์ƒ๋‹จ๋ฐ”์˜ ๋†’์ด๋งŒํผ์„ ์ฐจ๊ฐ์‹œ์ผœ์ฃผ๋ฉด, ๊ทธ๋งŒํผ ๋œ ์ด๋™ํ•˜๊ฒŒ ๋ ๊ฑฐ๋ผ ์ƒ๊ฐํ•˜์—ฌ ์•ž์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ์ƒ๋‹จ๋ฐ”์˜ ๋†’์ด๋งŒํผ ์ฐจ๊ฐํ•ด๋ดค๋‹ค.

     

    const about = document.querySelector("#about");
    
    document.addEventListener("scroll", () => {
      console.log(about.getBoundingClientRect().y - navbarHeight);
    });

    ์˜ค, ์ƒ๋‹จ๋ฐ” ๋ฐ”๋กœ ์•„๋ž˜ y๊ฐ’์ด 0์ด ๋˜๋„๋ก ์ž˜ ๊ตฌํ˜„๋œ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์Šคํฌ๋กค๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ ์šฉ์‹œ์ผœ๋ณด์ž.

     

     

    2) ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฒ„ํŠผ์— ๊ฐ ํŽ˜์ด์ง€๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ค์ž

    ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฒ„ํŠผ์— ๊ฐ ํŽ˜์ด์ง€๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ.

    ๋ฒ„ํŠผ๋งˆ๋‹ค ํด๋ž˜์Šค๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์•„์„œ  ๊ฐ ๋ฉ”๋‰ด๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.

    ๊ทธ๋ ‡๋‹ค๊ณ  ๊ฐ ๋ฒ„ํŠผ๋งˆ๋‹ค ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ผ๋‹จ ํ•œ๋ฒˆ ์‹œ๋„ํ•ด๋ณธ๋‹ค.

    ์ผ๋‹จ ์ƒ๊ฐ๋‚˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๊ฐ ๋ฒ„ํŠผ๋งˆ๋‹ค ํ•ด๋‹น ํŽ˜์ด์ง€์™€ ์—ฐ๊ฒฐ๋˜๋Š” 'id'๋ฅผ ๋„ฃ์–ด์„œ ํ•ด๋‹น 'id'๊ฐ€ ์†ํ•œ ์ขŒํ‘œ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

     

    (1) window.scrollTo

    window.scrollTo๋Š” ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ์ขŒํ‘œ๊ฐ’๋งŒํผ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์ด๋™ํ•œ๋‹ค.

    ๊ทธ๋ž˜์„œ ๊ฐ ๋ฒ„ํŠผ๋งˆ๋‹ค ํ•ด๋‹น ํŽ˜์ด์ง€์™€ ๋™์ผํ•œ 'id'๋ฅผ html์—์„œ ๋„ฃ์–ด์ฃผ๊ณ , ํ•ด๋‹น id์˜ y์ขŒํ‘œ๊ฐ’์„ ์ฐพ์•„, ScrollTo๋กœ ์—ฐ๊ฒฐ์‹œ์ผฐ๋‹ค.

     

    gif

     

    //1. html์—์„œ ๊ฐ ๋ฒ„ํŠผ๋ณ„๋กœ id๋„ฃ์€ ํ›„ JS์—์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
    const home = document.querySelector('#home');
    const about = document.querySelector('#about');
    const skillls = document.querySelector('#skills');
    const work = document.querySelector('#work');
    const tesimonials = document.querySelector('#testimonials');
    const contact = document.querySelector('#contact');
    
    //2. ํ•ด๋‹น๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด 1์—์„œ ๊ฐ€์ ธ์˜จ 'id'๊ฐ€ ์†ํ•˜๋Š” ํŽ˜์ด์ง€์˜ y์ขŒํ‘œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    //3. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น y๊ฐ’์—์„œ ์ƒ๋‹จ๋ฐ” ๋†’์ด๋งŒํผ ์ฐจ๊ฐํ•œ ์ขŒํ‘œ๊ฐ’๊นŒ์ง€ ์Šคํฌ๋กคํ•˜์—ฌ ์ด๋™ํ•œ๋‹ค.
    home.addEventListener("click", () => {
      const rect = home.getBoundingClientRect();
      scrollTo(0,rect.y - navbarHeight);
    });
    
    about.addEventListener("click", () => {
      const rect = about.getBoundingClientRect();
      console.log(scrollTo(0,rect.y - navbarHeight));
    });
    
    ...

     

    ์˜ค, ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋‹ˆ, ์œ„์—์„œ ์ง€์ •ํ•œ ํŽ˜์ด์ง€๊นŒ์ง€ ์ž˜ ์ด๋™ํ•œ๋‹ค.

    ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์ œ๋ฉ‹๋Œ€๋กœ ์ด๋™ํ•œ๋‹ค. ์ผ๊ด€๋˜์ง€ ์•Š์€์ด๋™...

     

    (2) event.target

    event

    ํ•ด๋‹ตํŽธ์—์„œ ์•ฝ๊ฐ„ ํžŒํŠธ๋ฅผ ์–ป์—ˆ๋‹ค. ๋ฐ”๋กœ event๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

    ๊ฐ ๋ฉ”๋‰ด๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๋ฉ”๋‰ด๋ฒ„ํŠผ์ด ์ด๋ฒคํŠธ๋กœ ๋“ค์–ด์™€ ์นด์šดํŠธ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    const navbarMenu = document.querySelector('.navbar__menu');
    navbarMenu.addEventListener('click', (event) => {
      console.log(event);
    });

     

    event.target

    ๊ทธ๋Ÿฌ๋ฉด ๋‚ด๊ฐ€ ๋ˆ„๋ฅธ ๋ฒ„ํŠผ์„ ์–ด๋–ป๊ฒŒ 'ํŠน์ •'์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ?

    ๋ฐ”๋กœ event.target property๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๊ทธ ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

    const navbarMenu = document.querySelector('.navbar__menu');
    navbarMenu.addEventListener('click', (event) => {
      console.log(event.target);
    });

     

    (3) data- ์†์„ฑ

    ์ตœ์ข…์ ์œผ๋กœ๋Š” ๋‚ด๊ฐ€ ๋ˆ„๋ฅธ ๋ฒ„ํŠผ์— ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ด๋ฏ€๋กœ, ๋ฒ„ํŠผ ๋‚ด๋ถ€์— ํ•ด๋‹น ํŽ˜์ด์ง€์™€ ์—ฐ๊ฒฐ๋˜๋Š” '์ •๋ณด'๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

    ์•„, ๊ฒฐ๊ตญ์—๋Š” ๊ฐ ๋ฒ„ํŠผ๋งˆ๋‹ค 'id'๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งž๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค๋งŒ ๋„๊ตฌ๊ฐ€ ๋‹ค๋ฅผ ๋ฟ.

     

    data- ์†์„ฑ?

    HTML์˜ ๋ฐ์ดํ„ฐ์†์„ฑ (data-*)์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋ฒ„ํŠผ๋งˆ๋‹ค 'id'๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

    ๋ฐ์ดํ„ฐ์†์„ฑ์€ ํŠน์ •์š”์†Œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€๋งŒ ํ™•์ •๋œ ์˜๋ฏธ๋Š” ๊ฐ–์ง€ ์•Š๋Š” ์†์„ฑ์ด๋‹ค. DOM๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ์†์„ฑ์˜ ์กฐ์ž‘ ์—†์ด๋„ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๋ญ”๊ฐ€ ์˜๋ฏธ๋Š” ์—†์ง€๋งŒ ๋‹ค๋ฅธ ๋ฌธ๋ฒ•๊ณผ '์—ฐ๊ฒฐ'์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์†์„ฑ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

     

    ๊ฒŒ๋‹ค๊ฐ€ ๊ณ„์† ๋ณ€ํ•˜๋Š” ์ •๋ณด๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ display๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ํ•ด๋‹น ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. (๊ณ  ํ•˜๋Š”๋ฐ ๋ฌด์Šจ์†Œ๋ฆฐ์ง€๋Š” ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.)

     

    JS์—์„œ๋Š” getAttribute() ๋˜๋Š” dataset ์œผ๋กœ ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

    CSS์—์„œ๋„ ์—ญ์‹œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

     

    data-link๋ผ๋Š” ์†์„ฑ์„ ์‚ฌ์šฉํ•ด๋ณด์ž

    <ul class="navbar__menu">
      <li class="navbar__menu__item active" data-link="#home">Home</li>
      <li class="navbar__menu__item" data-link="#about">About me</li>
      <li class="navbar__menu__item" data-link="#skills">Skill</li>
      <li class="navbar__menu__item" data-link="#work">My Work</li>
      <li class="navbar__menu__item" data-link="#testimonials">Testimonial</li>
      <li class="navbar__menu__item" data-link="#contacts">Contact</li>
    </ul>

    HTML์— ๊ฐ ๋ฒ„ํŠผ๋งˆ๋‹ค data- ์†์„ฑ์„ ์‚ฌ์šฉํ•ด 'link'๋ผ๋Š” ๊ณณ์— ํ•ด๋‹น 'id'๋“ค์„ ๋‹ด์•„๋‘”๋‹ค.

     

    const navbarMenu = document.querySelector('.navbar__menu');
    navbarMenu.addEventListener('click', (event) => {
    
      const target = event.target;
      const link = target.dataset.link;
      
      console.log(event.target.dataset.link);
    });

    ๊ฐ ๋ฒ„ํŠผ์˜ id๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ค‘

     

    JS์—์„œ data์†์„ฑ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ๋Š” ์•ž์—์„œ ๋งํ•œ๊ฒƒ ์ฒ˜๋Ÿผ dataset์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

    dataset์•ˆ์˜ link๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋˜๋ฉด ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฐ ๋ฒ„ํŠผ์˜ id๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

     

    ๊ทธ๋Ÿฐ๋ฐ ์ƒ๋‹จ๋ฐ” ๋ฉ”๋‰ด์—์„œ data์†์„ฑ์„ ์ •์˜ํ•ด์ฃผ์ง€ ์•Š์€ ๋ถ€๋ถ„์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด undefined๋กœ ๋œจ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น๋ถ€๋ถ„์„ ๋ˆŒ๋ €์„ ๋•Œ ์•„๋ฌด๋Ÿฐ ๋ฐ˜์‘์„ ํ•˜์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

    const navbarMenu = document.querySelector('.navbar__menu');
    navbarMenu.addEventListener('click', (event) => {
    
      const target = event.target;
      const link = target.dataset.link;
    
      console.log(event.target.dataset.link);
      
      //link๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ null (์•„๋ฌด๊ฒƒ๋„ ๋“ค์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด) ๊ทธ๋ƒฅ return์„ ์‹œํ‚จ๋‹ค.
      //์˜ˆ์™ธ์กฐ๊ฑด์„ ์•ž์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ , else๋ถ€๋ถ„์— ์›ํ•˜๋Š” ๋™์ž‘์„ ๋„ฃ๋Š”๋‹ค.
      if (link == null) {
        return;
      } else {
      };

     

    ์š”์•ฝํ•˜์ž๋ฉด event.target๊ณผ dataset์˜ ์กฐํ•ฉ์„ ํ†ตํ•ด ๊ฐ ๋ฒ„ํŠผ์˜ 'id'๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

     

     

    (4) element.scrollIntoView()

    ๋ฒ„ํŠผ์„ ์„ ํƒํ–ˆ์„ ๋•Œ, ์›ํ•˜๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚˜๋Š” 'id์˜ ์œ„์น˜๊ฐ’ + scrollTo'๋ฅผ ์ด์šฉํ–ˆ๋Š”๋ฐ, ์ด๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋‹ค.

    ๋ฐ”๋กœ scrollIntoView๋ผ๋Š” ์†์„ฑ์ธ๋ฐ ํ˜ธ์ถœ๋œ ์š”์†Œ์˜ ์ƒ์œ„ ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ์Šคํฌ๋กค๋ง ํ•ด์ค€๋‹ค. ์ฆ‰, id์˜ ์œ„์น˜๊ฐ’์ด ์—†์–ด๋„ id๋งŒ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์œ„์น˜๊นŒ์ง€ ์ž๋™์œผ๋กœ ์Šคํฌ๋กคํ•ด์ค€๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

     

    ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ๋‹จ ๋˜๋Š” ํ•˜๋‹จ ๋“ฑ ์–ด๋Š์œ„์น˜๋กœ ์ด๋™์‹œํ‚ฌ์ง€ option์„ ํ†ตํ•ด ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    const navbarMenu = document.querySelector('.navbar__menu');
    navbarMenu.addEventListener('click', (event) => {
    
      const target = event.target;
      const link = target.dataset.link;
    
      console.log(event.target.dataset.link);
      
      if (link == null) {
        return;
      } else {
        const scroll = document.querySelector(link);
        scroll.scrollIntoView({behavior:"smooth"}); //option์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ smoothํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค
      }
    });

     

    ์ง ! ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ž˜ ์ด๋™ํ•œ๋‹ค.

     

     

    ๊ทธ๋Ÿฐ๋ฐ ์ƒ๋‹จ๋ฐ” ๋ฐ”๋กœ ๋ฐ‘์œผ๋กœ ์˜ค๋„๋ก ๋งŒ๋“ค๊ณ  ์‹ถ์€๋ฐ ๊ทธ๊ฑด scrollintoview๋กœ๋Š” ์•ˆ๋˜๋Š”๊ฑธ๊นŒ.

    ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค์„ ์ข€ ๋” ์ •๋ฆฌํ•ด๋ณด๊ณ  ํ…Œ์ŠคํŠธ์ข€ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

     

     

    3) ๊ทธ๋ž˜์„œ hash table ํ˜•ํƒœ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์•„๋‹๊นŒ. (์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ (0)1๋กœ?!)

    getBoundingClientRect๋„ ๊ทธ๋ ‡๊ณ  scrollIntoView๋„ ๊ทธ๋ ‡๊ณ  ํ•˜๋‚˜์˜ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ์†์„ฑ๋ณด๋‹ค๋Š”

    objectํ˜•ํƒœ๋กœ ๋ฌถ์–ด์„œ ์—ฌ๋Ÿฌ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ์†์„ฑ์„ ๋” ๋งŽ์ด ์ด์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. (objectํ˜•ํƒœ์— ์ ‘๊ทผํ•ด ๊ทธ ์•ˆ์—์„œ ์˜ต์…˜์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฐ’์„ ์„ ํƒ)

     

    ์•„๋ฌด๋ž˜๋„ ๋” ๋น ๋ฅธ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด์„œ ์œ„์™€ ๊ฐ™์€ hash table๊ตฌ์กฐ๋กœ ๋ณด์ด๋Š” ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ Hash table(JS์—์„œ๋Š” object)๋กœ ์ ‘๊ทผํ•˜๊ฒŒ๋˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ (0)1์ด๊ธฐ ๋•Œ๋ฌธ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํšจ์œจ์„ฑ์ด ๋งค์šฐ๋งค์šฐ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

     

    ์ขŒํ‘œ๊ฐ’์„ ์ฐพ๋Š” ํ•จ์ˆ˜๋“ค, ๊ทธ๋ฆฌ๊ณ  ์Šคํฌ๋กค๋งํ•˜๋Š” ํ•จ์ˆ˜๋“ค์ด ๊ฝค ์žˆ๋˜๋ฐ ์ด ์ค‘์—์„œ ์œ„์— ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๋“ค์ด ๋น„๊ต์  '์ตœ๊ทผ์—'๋‚˜์˜จ ํ•จ์ˆ˜์ด์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค. ์ด๋ฒˆ์— ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋“ค์„ ๋ดค๋Š”๋ฐ ๋„ˆ๋ฌด ํ—ท๊ฐˆ๋ ค์„œ ๊ฐ ํ•จ์ˆ˜๋“ค์— ๋Œ€ํ•ด์„œ๋„ ์ •๋ฆฌ๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค.

     

    [ํ—ท๊ฐˆ๋ฆฌ๋Š” ํ•จ์ˆ˜๋“ค]

    - queryselector / getelementbyid

    - scrollby / scrollto / scrollinto / scrollintoview

    - getBoundingClientRect / 

     

     


    eunne's github: https://github.com/eunne/Project_Portfolio.git

Designed by Tistory.