JavaScriptの.scrollIntoView()
メソッドを使って、コード量少なめでできるスムーススクロールを作ってみました。
.scrollIntoView()
scrollIntoView()
は、呼び出された要素がユーザーに見えるところまで、要素の親コンテナーをスクロールするメソッドです。
この記事のスニペットは、このメソッドのスムーズにスクロールする behavior
を使って、スムーススクロールを作っています。
簡単に使えるメソッドで、この記事ではsmooth
を指定しています。
スムーススクロールのサンプル
a
タグにつけた href
の「#」に反応してスムーススクロールです。
「001」〜「003」の各ボタンをクリックすると、その下にあるそれぞれのブロックにスムーススクロールします。
サンプル上部の「001〜003」のボタンはCSSのsticky
で追従させてます。
スムーススクロールのコード
HTMLは、ul
タグの中身にある a
タグ がスクロールのトリガーになります。その為、a
タグには、href でスクロールさせたい「#」をつけた要素のid名を指定して、サンプルではdiv
タグにそれぞれ対応したid名を付与しています。
<ul>
<li><a href="#block001">001</a></li>
<li><a href="#block002">002</a></li>
<li><a href="#block003">003</a></li>
</ul>
<div id="block001">001のブロック</div>
<div id="block002">002のブロック</div>
<div id="block003">003のブロック</div>
次にJavaScriptですが、.querySelectorAll()
を使い a
タグに#が付いているものを対象にします。
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
document.querySelector(this.getAttribute('href')).scrollIntoView({
behavior: 'smooth'
});
});
});
そして、.addEventListene
r のクリックで発動し、.scrollIntoView()
でスクロールの動きを定義して完成です。
a
タグに反応するので、使い勝手の良いスニペットです。