
jQueryでスクロールに対応する動きがついた固定ヘッダーを実装する
スクロールで画面上部に固定されるヘッダーを実装するときに、スクロール量やスクロールの方向に合わせて動きを変化させたいときに使える方法です。ファーストビューではヘッダーを表示させたくないけど、スクロール時は固定で表示させるようなデザインでよく見かけますね。
具体的には、jQueryでスクロール量を取得しながらCSS側でヘッダーの位置を調整する形になります。ここでは、ページをスクロールさせると上からヘッダーが画面上部に固定表示されて、上方向にスクロールさせるとそのまま上方向に画面外へと収まり非表示になり、下方向にスクロールすると再度表示されるという仕様です。それでは実際のコードを見ていきます。
【HTML】※一部省略
<header id="fixed-header">
<!-- 固定ヘッダーエリア -->
<nav>
<span>MENU 1</span>
<span>MENU 2</span>
<span>MENU 3</span>
<span>MENU 4</span>
</nav>
</header>
<main>
<div id="inner-header">
<!-- セクション内ヘッダーエリア -->
<nav>
<span>MENU 1</span>
<span>MENU 2</span>
<span>MENU 3</span>
<span>MENU 4</span>
</nav>
</div>
</main>
【CSS】※一部省略
#fixed-header {
background: #fff;
box-shadow: 0 2px 10px 0 rgba(0,0,0,.30);
width: 100%;
height: 80px;
position: fixed;
top: 0;
left: 0;
transition: all 0.3s ease 0s;
transform: translateY(-80px);
z-index: 100;
}
【javascript】
$(function(){
var startPos = 0;
var headerElem = $('#fixed-header');
var threshold = 200;
$(window).on('scroll',function(){
var currentPos = $(this).scrollTop();
if(currentPos > startPos) {
if($(window).scrollTop() >= threshold) {
headerElem.css({
'transform': 'translateY(0)'
});
}
} else {
headerElem.css({
'transform': 'translateY(-80px)'
});
}
startPos = currentPos;
});
});
HTMLはシンプルにヘッダー部分だけ用意すればOKです。まずはCSSでpositionを固定にして、transformでヘッダーの高さ分上方向に移動させ、ヘッダーが画面内に表示されないようにしておきます。このときに、transitionを設定しておくと動きにアニメーションをつけることができます。
そして、JavaScriptでスクロールに合わせてヘッダー部分の動きの制御をかけていきます。閾値を示す変数にはページトップからどれくらいスクロールするとヘッダーが表示されるかというのを指定します。あとはスクロールイベントでヘッダーの位置を調整する部分を実行していくだけです。これだけでスクロールに対応した動きをする固定ヘッダーが実装できます。今回のサンプルはこちらに用意しましたのでよかったらご参考に。
See the Pen sticky-header by designsupply (@designsupply) on CodePen.
上記ではヘッダーの高さを絶対値指定していますが、高さを指定しない場合は、jQueryでヘッダーの高さを取得して、適宜変数に格納して調整する形になるかと思います。categories
- WordPress(61)
- JavaScript(49)
- Vue.js(48)
- CSS(46)
- jQuery(34)
- Nuxt.js(22)
- Sass(21)
- Gulp(17)
- webpack(16)
- PHP(14)
- HTML(14)
- GSAP(11)
- React(10)
- Vite(9)
- Pug(9)
- Laravel(8)
- Cordova(8)
- Linux(7)
- Next.js(6)
- Apache(5)
- Shopify(4)
- REST API(4)
- Node.js(4)
- Smarty(3)
- Git(3)
- JSON(3)
- その他プログラミング(3)
- Google Apps API(3)
- Bootstrap(3)
- 環境構築・システム(3)
- TypeScript(2)
- EJS(2)
- RMS(2)
- Docker(2)
- Instagram API(2)
- Excel VBA(2)
- SVG(1)
- Dart(1)
- ECカートASP(1)
- Markdown(1)
- AMP(1)
- Nginx(1)
- XML(1)
- shellscript(1)
- Ruby(1)
- MySQL(1)