CSS(スタイルシート部分)
- footer 要素が position: fixed; で画面下部に固定。スクロールしてもフッターメニューが常に画面下部に表示。
- transition: .5s; は、フッターの表示・非表示に関するアニメーション効果を指定。このスタイルによりフッターが表示・非表示になる際に0.5秒の滑らかな動きが付加。
- footer .inner は、メニュー内のアイコンやボタンを中央に配置、flexbox を使用して配置と整列を調整。
- .rounded-circle は、ボタンのスタイルで丸い形状と半透明の効果(opacity: 0.75;)を持たせています。
追加 CSS
/* フッターメニュー用スタイル */
footer {
width: 100%;
height: 90px;
position: fixed;
bottom: 0;
transition: .5s;
}
footer .inner {
height: 100%;
display: flex;
flex-wrap: nowrap;
justify-content: space-around;
align-items: center;
}
footer .inner .rounded-circle {
opacity: 0.75;
}
HTML(footer.php のメニュー部分)
- メニューは <footer> タグ内にあり、それぞれのボタンはリンクとして配置。
- <i> タグでフォントアイコン(Font Awesome)を表示。
- ボタンのスタイルには btn btn-primary クラスが付いて、Bootstrapのボタンスタイルを利用。
- rounded-circle でボタンが丸く表示され、p-0 や style=”width:3.0rem;height:3.0rem;” によりサイズ調整。
footer.php
<!-- フッター -->
<footer id="page-footer" role="main-info">
<div class="inner">
<!-- 01-Button -->
<div class="text-center">
<a href="#">
<button type="button" class="btn btn-primary rounded-circle p-0" style="width:3.0rem;height:3.0rem;">
<i class="fas fa-bars text-white fa-lg"></i>
</button>
<p class="small mb-n4">Menu</p>
</a>
</div>
<!-- 02 -->
<div class="text-center">
<a href="#">
<button type="button" class="btn btn-primary rounded-circle p-0" style="width:3.0rem;height:3.0rem;">
<i class="far fa-calendar-alt text-white fa-lg"></i>
</button>
<p class="small mb-n4">New</p>
</a>
</div>
<!-- 03-->
<div class="text-center">
<a href="#">
<button type="button" class="btn btn-primary rounded-circle p-0" style="width:3.0rem;height:3.0rem;">
<i class="far fa-plus-square text-white fa-lg"></i>
</button>
<p class="small mb-n4">Regist</p>
</a>
</div>
<!-- 04 -->
<div class="text-center">
<a href="#">
<button type="button" class="btn btn-primary rounded-circle p-0" style="width:3.0rem;height:3.0rem;">
<i class="fas fa-search text-white fa-lg"></i>
</button>
<p class="small mb-n4">Search</p>
</a>
</div>
<!-- 05 -->
<div class="text-center">
<a href="#">
<button type="button" class="btn btn-primary rounded-circle p-0" style="width:3.0rem;height:3.0rem;">
<i class="fas fa-share-alt text-white fa-lg"></i>
</button>
<p class="small mb-n4">Share</p>
</a>
</div>
</div>
</footer>
script.jsファイル
- スクロール操作に応じてフッターメニューの表示・非表示を切り替える動作が実装
- 下にスクロールするとフッターメニューが画面から隠れ、上にスクロールすると再び表示される動作を実現
1. 初期設定
- 変数の初期化:
- start_position = 0:ページを読み込んだときのスクロール位置を初期化。最初はスクロール位置が0。
- window_position:現在のスクロール位置を保存するための変数。
- $window = $(window):jQueryを使ってブラウザのウィンドウを $window として参照。ウィンドウのスクロールイベントを監視。
- $footer = $(‘footer’):<footer> 要素を $footer として参照。これがスクロールに応じて動作するフッターメニューです。
2. スクロールイベントの処理
- スクロールイベントの登録:
- $window.on(‘scroll’, function() {…}):スクロールイベントが発生するたびに、この関数が実行。これにで、スクロールするたびにフッターが表示されるか隠れるかを判断。
- スクロール位置の取得:
- window_position = $(this).scrollTop();:現在のスクロール位置を取得。この値はスクロールが下に進むと増加、上に進むと減少。
- スクロール方向の判断:
- if (window_position <= start_position):現在のスクロール位置 window_position が前の位置 start_position より小さい=上にスクロールしていることを意味。=フッターを表示します。
- $footer.css(‘bottom’, ‘0’);:フッターメニューを画面下部に固定して表示。
- else:スクロール位置が増加=下にスクロールしている場合>フッターメニューを隠す。
- $footer.css(‘bottom’, ‘-90px’);:フッターメニューを画面外に移動させて非表示。
- スクロール位置の更新:
- start_position = window_position;:現在のスクロール位置を次の判定のために保存。これにより、次のスクロール時にスクロールの方向を判断できます。
3. ページ読み込み時のスクロールイベント
- $(window).trigger(‘scroll’);:ページが読み込まれたときにもスクロールイベントを発生させることで、ページがすでにスクロールされた状態でもフッターメニューの表示/非表示を適切に反映させます。
assets>javascript>script.js
/*
下スクロールでヘッダーフッターを隠し,
上スクロールで出現させる.
モバイルファーストが基本なため,
画面領域を有効活用したい場合に有効
*/
$(function(){
let start_position = 0, //初期位置0
window_position,
$window = $(window),
$footer = $('footer');
// スクロールイベントを設定
$window.on( 'scroll' , function(){
// スクロール量の取得
window_position = $(this).scrollTop();
// スクロール量が初期位置より小さければ,
// 上にスクロールしているのでヘッダーフッターを出現させる
if (window_position <= start_position) {
$footer.css('bottom','0');
}
else {
$footer.css('bottom','-90px');
}
// 現在の位置を更新する
start_position = window_position;
}
);
// 中途半端なところでロードされても良いようにスクロールイベントを発生させる
$window.trigger('scroll');
}
);