今はHPはレスポンシブ対応がほとんどで、PCで表示したコンテンツを内容はそのままに、レイアウトを変更してスマホでも閲覧できる仕組みなっています。
その分、PCの情報をスマホで見ると縦長になり、情報を見るたびに指でスクロールする必要があるわけですが、その際にグローバルナビと言われる各ページへ移動するためのボタンを設置し、途中からページへ移動できるようにする工夫が必要となります。
ページの上部に固定していると下へスクロールするたびに遠くなり、別のページに行くためには最上部まで戻る必要があります。
それを少しでも負担軽くするためにモニター上部へ固定する方法がありますが、これをするとその分の表示枠を消費し、さらに小さく限られた画面で情報をみることになります。
そこで工夫する内容は、スマホアプリでよくみられる、下へスクロール中は非表示し、上へスクロールしたときに表示するという仕組みです。
X(旧Twitter)ではそのような動作で画面にメニューがひょこひょこ表示非表示を繰り返しています。
これをjQueryで実装する方法を記録しておきます。
<script>
// 現在の位置を保持
let currentPosition = 0;
let nav;
let navHeight;
let f_nav;
let f_navHeight;
// ブラウザ読み込み、もしくはリサイズしたとき
$(window).on("load resize", function(){
// ヘッダーの高さを取得
nav = document.querySelector("#nav");
navHeight = nav.clientHeight * -1;
f_nav = document.querySelector("#sp_footer");
f_navHeight = f_nav.clientHeight * 1;
})
$(function(){
// 画面スクロールしたとき
$(window).on("scroll", function(){
// スクロール位置を保持
let scrollPosition = document.documentElement.scrollTop;
// スクロールに合わせて要素をヘッダーの高さ分だけ移動(表示域から隠したり表示したり)
if (currentPosition <= scrollPosition) {
nav.style.transform = "translate(0," + navHeight + "px)";
f_nav.style.transform = "translate(0," + f_navHeight + "px)";
} else if (currentPosition > scrollPosition) {
nav.style.transform = "translate(0, 0)";
f_nav.style.transform = "translate(0, 0)";
}
currentPosition = document.documentElement.scrollTop;
});
})
</script>
これでスクロール時に表示非表示の動作は確認できると思いますが、このままでは0と1の動きでパッパパッパと急に動くだけです。
どうせなら表示までをスムーズにぬるっとする感じに一工夫したいと思います。こんな場合は、対象のブロックにCSSでプロパティと値をつけます。
transition: transform 0.3s;
限られた小さい画面を上手く有効活用したいため、メニューの設置方法や表示方法は工夫するだけでだいぶ変わりますね。