X

【コピペでできる】画面読み込み中にローディング画像を表示するjQuery

たくさんの画像を表示するようなWebページなどは、画面を読み込むまでに時間がかかり、サイト閲覧者にストレスを与えてしまう可能性があります。

そんな時は、読み込み中であることがわかる「ローディング」を表示し、サイト閲覧者にストレスを感じさせない工夫をすると良いですよね。
そこで、画面読み込み中はローディング画像を全面表示させる、jQueryの書き方をご紹介します。

デモ画面


では、まずデモ画面をご覧ください。
デモ画面へ

アクセスすると、ローディング画像を表示、読み込み後、その画像が消えて、コンテンツが表示されるといったものです。

HTML


htmlは下記のような感じで。

<div id="loader-bg"> 
  <div id="loader">
    <img src="load.gif" width="80" height="80" alt="Loading..." />
    <p>Loading...</p>
  </div>
</div>
<div id="contents">
  お待たせーーー。
</div>


ローディング画像は自分で用意する必要がありますが、本サイトでも紹介した、無料でおしゃれなローディング用画像をダウンロードできるサイトを活用することをオススメします。

有料のものもたくさんあるのですが、無料のものでも十分おしゃれな画像をたくさん用意してくださってます。
おしゃれなローディング用gif画像が無料でダウンロードできるサイト - shiru-web.com

<div id="loader-bg"> 
  <div id="loader">
    <img src="load.gif" width="80" height="80" alt="Loading..." />
    <p>Loading...</p>
  </div>
</div>


↑ここでローディング画像を表示する内容を指定してます。

<div id="contents">
  お待たせーーー。
</div>


↑こっちが、ローディング後表示するコンテンツですね。

CSS

続いてCSS。

#loader-bg {
  display: none;
  position: fixed;
  width: 100%;
  height: 100%;
  top: 0px;
  left: 0px;
  background: #fff;
  z-index: 1;
}
#loader {
  display: none;
  position: fixed;
  top: 50%;
  left: 50%;
  width: 200px;
  height: 200px;
  margin-top: -100px;
  margin-left: -100px;
  text-align: center;
  color: #fff;
  z-index: 2;
}
#contents{
  width:100%;
  font-size:50px;
  margin: 40px auto;
}


ローディングを表示する部分については、デフォルトでは、display:noneにして、表示させないようにしておきます。
コンテンツ部分はご自身のサイトに適したものを。

jQuery


最後にjQuery。

<script>
$(function() {
  var h = $(window).height(); //画面の高さを取得
 
  $('#contents').css('display','none');//コンテンツを非表示に
  $('#loader-bg ,#loader').height(h).css('display','block');//ローディング画像を表示
});
 
$(window).load(function () { //読み込み完了したら実行する
  $('#loader-bg').delay(900).fadeOut(800);//ローディングを隠す
  $('#loader').delay(600).fadeOut(300);
  $('#contens').css('display', 'block');//コンテンツを表示する
});
 
$(function(){
  setTimeout('stopload()',10000); //いつまでもローディング状態にならないように10秒で強制表示させる

});
 
function stopload(){ //強制表示の関数
  $('#contens').css('display','block');
  $('#loader-bg').delay(900).fadeOut(800);
  $('#loader').delay(600).fadeOut(300);
}
</script>


こんな感じです。それぞれコメントを書いてますので、それを参考に。

後半部分に、setTimeout関数を入れてます。あまりにも読み込みに時間がかかりすぎた場合に、いつまでもローディング状態だと具合が悪いです。
「いつまでたっても何も表示されないじゃないか」となってしまいますので。

なので、10秒たったら強制的にコンテンツを表示させるロジックを入れています。
秒数は各自好きなタイミングでよろしいかと思います。10秒は長いかな。。

是非是非、お試しくださいませ。

shirushiru: