Bootstrap の Spinner を利用してロード中画面を表示する
大きな画像を利用したページや、大量のコンテンツが掲載されたページなどにおいて、画像やリソースが読み込まれるまで画面を表示させたくない場合、ロード画面を表示したい事があります。
世の中には JQuery で同様の事を実現できるプラグインなどがありますが、Bootstrap を利用してるのであれば、Bootstrap の Spinner を利用して簡単に実装することができますので、ここでサンプルコードをご紹介したいと思います。
もちろん、ページには Bootstrap に必要なライブラリを読み込むようにしてください。
HTML
<body>
<div id="loading">
<div id="spinner" class="d-flex justify-content-center align-items-center">
<div class="spinner-border text-primary" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
<div id="wrap">
<section class="container">
<div class="contents">
<h2 class="text-center my-4">ロード後に表示させたい内容</h2>
<p class="text-center"><img src="https://picsum.photos/1280/720/?blur=3" class="img-fluid"></p>
</div>
</section>
</div>
</body>
CSS
<style>
#loading {
display: none;
position: fixed;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
background: #000;
z-index: 1;
}
#spinner {
display: none;
color: #fff;
z-index: 2;
}
#wrap{
background: #fff;
width: 100%;
}
</style>
JavaScript
<script>
$(function() {
var h = $(window).height();
$('#wrap').css('display','none');
$('#loading ,#spinner').height(h).css('display','block');
});
$(window).on('load',function () {
$('#wrap').css('display', 'block');
$('#loading').delay(500).fadeOut(500);
$('#spinner').delay(300).fadeOut(300);
});
//5秒たったら強制的にロード画面を非表示
$(function(){
setTimeout('stopload()',5000);
});
function stopload(){
$('#wrap').css('display','block');
$('#loading').delay(500).fadeOut(500);
$('#spinner').delay(300).fadeOut(300);
}
</script>
実際のサンプルはこちらでご確認いただけます。
ロード中 Spinner 画面サンプル