document.querySelectorAll('a[href*="#"]').forEach(link => {
link.addEventListener('click', event => {
event.preventDefault();
const elmHash = link.getAttribute('href');
const targetElement = document.querySelector(elmHash);
if (targetElement) {
const pos = targetElement.offsetTop;
// スクロールアニメーション
window.scrollTo({
top: pos,
behavior: 'smooth'
});
}
});
});
ocument.querySelectorAll('a[href*="#"]').forEach(link => {...});
:querySelectorAll
メソッドを使用して、ページ内の全ての<a>
要素を取得します。forEach
メソッドを使用して、取得した各リンクに対して次の処理を実行します。
link.addEventListener('click', event => {...});
:- 各リンクにクリックイベントリスナーを追加します。
event.preventDefault();
でデフォルトのクリック動作(通常のリンク遷移)を無効化します。
const elmHash = link.getAttribute('href');
:- クリックされたリンクの
href
属性を取得して、elmHash
という変数に格納します。この中にはリンク先のセクションのID(例:#section1
)が含まれます。
- クリックされたリンクの
const targetElement = document.querySelector(elmHash);
:elmHash
で指定されたIDを持つ要素(セクション)をdocument.querySelector
を使って取得し、targetElement
として変数に格納します。
if (targetElement) { ... }
:targetElement
が正しく取得された場合に以下の処理を実行します。
const pos = targetElement.offsetTop;
:- ターゲット要素(セクション)の上部までの距離を
offsetTop
プロパティを使って取得し、pos
として変数に格納します。
- ターゲット要素(セクション)の上部までの距離を
window.scrollTo({ top: pos, behavior: 'smooth' });
:window.scrollTo
メソッドを使用して、ページを指定された位置(pos
)までスクロールさせます。behavior: 'smooth'
を指定することで、スムーズなスクロールアニメーションが適用されます。
このようにして、各リンクがクリックされたときに対応するセクションまでスムーズにスクロールする仕組みが構築されています。
参考
動くWebデザインアイデア帳