😚

【JavaScript】簡単でスムーズなページ内リンクのスクロール 【コピペでOK!】

2024/08/27に公開

よく使う割にはやり方を忘れることがあったため、備忘録として綴っておきます。
下記はVue.jsのコードですが、ネイティブのJavaScriptでもmethodsやmounted内をコピペで実装できます。


// HTML
  <div>
    <div id="FirstView"></div>
    <div id="SecondView"></div>
    <div id="ThirdView"></div>
    <nav class="header">
      <ul>
        <li @click="scroll('FirstView')">FirstView</li>
        <li @click="scroll('SecondView')">SecondView</li>
        <li @click="scroll('ThirdView')">ThirdView</li>
      </ul>
    </nav>
  </div>


// Js
  data() {
    return {
      scrollY: 0,
    };
  },
  methods: {
    scroll(target) {
      // 遷移先取得
      const element = document.getElementById(target);
      if (element) {
        // 画面上端から要素上部分までの高さ + スクロールしていた場合はスクロール量も加算
        const position = element.getBoundingClientRect().top + this.scrollY;
        //  スクロールする
        window.scrollTo({
          top: position,
          behavior: "smooth",
        });
      }
    },
    getScroll() {
      // スクロール量取得
      this.scrollY = window.scrollY;
    },
  },
  mounted() {
    // イベント設定
    window.addEventListener("scroll", this.getScroll);
  },
};

Discussion