[JavaScript] position:fixedを横スクロールで固定させない方法
2 min read
position: fixed
と絶対位置を指定すると、スクロールしても位置が固定されたままとなる。
ナビゲーション用のメガメニューをposition: fixed
で固定することは多いが、レスポンシブでなかったり横幅が絶対値指定の場合に横スクロールをすると他のコンテンツとずれてしまう。
こういった場合では横スクロールをした場合はズレるようにしたい。
デモ
方法
スクロールに応じて(window.scrollX)、対象の要素の位置をズラす処理を行う。
header.style.left = -window.scrollX + "px";
const header = document.querySelector("header");
let ticking = false;
document.addEventListener(
"scroll",
() => {
if (!ticking) {
requestAnimationFrame(() => {
ticking = false;
// header position
header.style.left = -window.scrollX + "px";
});
ticking = true;
}
},
{ passive: true }
);
スクロールイベントは負荷が高いため、最適化すると良いだろう。