jQuery
サイドメニューをスクロール時に固定し、且つ指定の範囲で
数スクロールでクラスをつけてFixにすると、レイアウト崩れなどを起こす事例があったので、
まずはjs(jQuery)で
jQuery(function($){
window.onscroll = function () {
scrollToggleClass(".target-area", ".sidemenu", "fixed");
}
function scrollToggleClass(rangeTarget, addTarget, classname) {
if($(rangeTarget).length){
scroll = $(window).scrollTop();
startPos = $(rangeTarget).offset().top;
endPos = startPos + $(rangeTarget).outerHeight();
if (scroll > startPos && scroll < endPos) {
$(addTarget).addClass(classname);
} else {
$(addTarget).removeClass(classname)
}
}
}
});
- .target-areaがここではスクロール追従させる目安の要素
- .sidemenuが実際に固定させるサイドメニュー
- fixedはjs発動で.sidemenuに追加で付与されるクラス名
クラスが付いたときに指定するCSSは
.sidemenu.fixed {position: sticky;}
fixedクラスをつけているのにstickyにしているのは置いておいて、fixedだと組み方によっては親要素から飛び出てしまうので、あえてのsticky。
jsはhttps://hacknote.jp/archives/47954/こちらを有難く参考(ほぼそのまま)にさせていただきました。