카테고리 없음

[JavaScript] 타겟 위치로 이동시키기

임고미 2022. 6. 29. 13:51
728x90
300x250

특정 element위치로 이동시킬경우 element의 위치를 구해서 scrollTo를 사용해주고 있었다.

그러나 더 쉬운 방법을 찾아 공유해보고자 한다..

키워드는

scrollIntoView
 
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>

    <style>
      .btn-box {
        position: sticky;
        top: 0;
      }
      .box div {
        width: 400px;
        height: 400px;
      }
      .box div:nth-child(1) {
        background: red;
      }
      .box div:nth-child(2) {
        background: blue;
      }
      .box div:nth-child(3) {
        background: pink;
      }
      .box div:nth-child(4) {
        background: violet;
      }
    </style>
  </head>
  <body>
    <div class="btn-box">
      <button class="itembtn">1</button>
      <button class="itembtn">2</button>
      <button class="itembtn">3</button>
      <button class="itembtn">4</button>
    </div>
    <div class="box">
      <div>item1</div>
      <div>item2</div>
      <div>item3</div>
      <div>item4</div>
    </div>

    <script>
      document.querySelectorAll(".itembtn").forEach((btn, index) => {
        btn.addEventListener("click", function () {
          document
            .querySelector(`.box div:nth-child(${index + 1})`)
            .scrollIntoView({ behavior: "smooth" });
        });
      });
    </script>
  </body>
</html>

해당 엘리먼드 위치로 바로 이동한다,.. 위의 테스트 코드는

버튼을 클릭하면 해당 아이템 시작점으로 스크롤해준다.

 

그런데 만약,, 맨위에 찰삭 붙게하고 싶은게 아니라 위에 여백을 남기고 싶은 경우에는 어떻게 해야할까 ?

이 경우에는 scrollIntoView 만으로는 해결할 수가 없다.

1. scrollIntoView 를 이용하는 방법

target.scrollIntoView();
window.scrollBy(0, -margin);

2단계로 해당 기능을 구현할 수 있다.
맨 위로 찰삭 붙게 한 다음, 원하는 만큼의 간격을 주는 방법 

2. window.scroll이용하기

  window.scroll({
        top: (target.offsetTop ?? 0) - (margin ?? 0),
  });

타겟의 위치 - 원하는만큼의 간격 
으로 한번에 이동하는 방법

참고 : 링크

728x90
300x250