CSSとjQueryで作るローディング

遊んでたら出来上がったもの。
firefoxでいい動きをしなかったので、userAgentで振り分けました。firefoxだとloadが完了するとloading画面がふわっとフェードし、それ以外のブラウザだと、波が引くようにloading画面が下に下がります。
動きの部分は全てcssアニメーション。firefoxブラウザ限定のフェードのみjsで制御しています。

デモページ

HTML

<div class="loading">
  <div class="loadingWrap">
    <div class="loadingImg"> <span class="loadingImgWrap loadingImgWrap1"> <span class="loadingImgWrap loadingImgWrap2"><img src="img/demo/loading2.png" alt=""></span> <img src="img/demo/loading1.png" alt=""> </span> </div>
  </div>
</div>
<div class="wrap">
  <div class="contents one">1</div>
  <div class="contents two">2</div>
  <div class="contents three">3</div>
</div>

CSS

  /*-------------------------------------------*/
  /*loading 
 /*-------------------------------------------*/
  .loading {
    position: fixed;
    width: 100%;
    height: 100%;
    bottom: 0;
    left: 0px;
    padding-top: 140px;
    overflow: hidden;
    z-index: 100000;
  }

  .loadingWrap {
    background: #15559d;
    width: 100%;
    height: 100%;
    overflow: hidden;
  }

  .loadingOk {
    height: 0 !important;
    bottom: -140px;
    animation: loadingOk 0.5s ease-in 0s 1 alternate;
  }

  @keyframes loadingOk {
    0% {
      height: 100%;
      bottom: 0;
    }

    100% {
      height: 0 !important;
      bottom: -140px;
    }
  }

  .loading:before {
    position: absolute;
    top: 0;
    width: 100%;
    height: 141px;
    content: '';
    display: inline-block;
    background: url(img/demo/170731_3.png) repeat-x bottom center;
    background-size: contain;
    vertical-align: bottom;
  }

  .loadingImg {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 150px;
    height: 150px;
    -webkit-transform: translate(-50%, -50%);
    -moz-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    -o-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
  }

  .loadingImg .loadingImgWrap {
    display: block;
    text-align: center;
  }

  .loadingImg .loadingImgWrap1 {
    position: relative;
    width: 150px;
    height: 150px;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    -moz-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    -o-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
  }

  .loadingImg .loadingImgWrap1>img {
    animation: nowLoading linear 2s -1s infinite normal;
  }

  @keyframes nowLoading {
    0% {
      transform: rotate(0deg);
    }

    100% {
      transform: rotate(-360deg);
    }
  }

  .loadingImg .loadingImgWrap2 {
    position: absolute;
    width: 60px;
    height: 36px;
    left: 0;
    right: 0;
    top: 58px;
    margin: 0 auto;
  }

  /*-------------------------------------------*/
  /*other 
  /*-------------------------------------------*/
  body {
    margin: 0;
    padding: 0;
  }

  .contents {
    width: 100%;
    height: 500px;
    line-height: 500px;
    text-align: center;
    vertical-align: middle;
    color: #fff;
    font-size: 50px;
    font-weight: bold;
  }

  .one {
    background: #b2e0f0;
  }

  .two {
    background: #67bedc;
  }

  .three {
    background: #2a9cc3;
  }

js(jQuery)

  jQuery(function() {
    var wrap = jQuery('.wrap');
    var loadingImg = jQuery('.loadimgImg');
    var loading = jQuery('.loading');
    var userAgent = window.navigator.userAgent.toLowerCase();

    jQuery(function() {
      var h = jQuery(window).height(); //ウィンドウの高さ
      wrap.css('display', 'none');
      loading.height(h).css('display', 'block');
      loadingImg.height(h).css('display', 'block');

      loading.removeClass('loadingOk'); //loadingOkというclassを消しておく
    });

    jQuery(window).load(function() { //windowがloadされたら処理開始
      if (userAgent.indexOf('firefox') != -1) { //もしfirefoxブラウザのとき
        loading.delay(900).fadeOut(800);
        loadingImg.delay(600).fadeOut(300); //firefoxのみふわっとなる
        wrap.css('display', 'block');
      } else {
        setTimeout(function() { //それ以外のブラウザのとき1000ミリ秒後に処理開始
          loading.addClass('loadingOk'); //loadingOkというclassを付ける
        }, 1000);
        wrap.css('display', 'block');
      }
    });
  });

wordpressで作っていたので、$がjqueryになっています。

デモページ