自分のためのメモ

サイドメニューをスクロール時に固定し、且つ指定の範囲で

数スクロールでクラスをつけて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/こちらを有難く参考(ほぼそのまま)にさせていただきました。