🔖
JavaScriptで指定した要素の位置までスクロールするには2022年現在なら scrollIntoView() が便利
TL;DR
- JavaScriptで指定した要素の位置までスクロールするには2022年現在なら scrollIntoView() が便利
- Element.scrollIntoView() | MDN
- 2022現在、各ブラウザの最新バージョンならサポートされている
- scrollIntoView | Can I Use
- 画面に表示してない要素には scrollIntoView() しても動かなかったりするので注意
JavaScriptで指定した要素の位置までスクロールする方法色々
Element.scrollIntoView()
わりと新しい方法みたい。
スムーススクロール(マウスホイールでのスクロールするのと同じようにスクロール)するのも簡単。
const element = document.getElementById('hoge');
element.scrollIntoView({
behavior: 'smooth'
});
要素の位置を取得後、ページをスクロールさせる
要素の位置を取得
Element.getBoundingClientRect().top
で指定の要素のY位置を取得できるのでこれを使う。
document.documentElement.scrollTop に値をセット
スムーススクロールはできない。
const element = document.getElementById('hoge');
const targetDOMRect = element.getBoundingClientRect();
const targetTop = targetDOMRect.top + window.pageYOffset;
document.documentElement.scrollTop = targetTop;
window.scrollTo() を使う
スムーススクロールもできる。
const element = document.getElementById('hoge');
const targetDOMRect = element.getBoundingClientRect();
const targetTop = targetDOMRect.top + window.pageYOffset;
window.scrollTo({
top: targetTop,
behavior: 'smooth'
});
全ての方法に共通する注意
画面に表示してない要素(hiddenタグなど)は
Element.scrollIntoView()
しても動かないし
Element.getBoundingClientRect()
しても top はゼロだし
でハマったりするので注意
参考リンク
- JavaScript ページの最上部にスクロールするボタン | ONE NOTES
- 指定した要素の位置へスクロールする : JavaScript | iPentec
- JavaScriptでスクロールをするプログラムの書き方(旧式とモダンなやり方) | devsakaso
- scrollIntoView が便利だった話 | astamuse Lab
Discussion