【jQuery】ローダーがフェードアウトしてくれない時のTips
これはTipsというよりも、忘れないための備忘録。
クロスブラウザ対応だったり、レガシーブラウザも一応見ておこうということで、久しくjQuery1系で制作をしていたが、押し寄せる技術の波と、制作する側としてBootstrap等のテンプレート使った方がマルチデバイス対応も速かったりするので、ようやく重い腰を上げて、Bootstrap 4をいじってみた。
Bootstrap 3系は以前にいじったことがあるが、4系になると、jQueryの3系が必須になってたようで、今まで好んで使っていたhtmlローダーが動かなかった。
何故だ…
jQuery1系以降で廃止になった内容が多々ある
結果から言うと、3系はfadeOutやfadeInが使用できなくなっていた模様。うっすら何かが廃止になったのは記憶にあったが、いまさらながら目の当たりにしたこれはちょっと恥ずかしい…
ともかく、
<div class="loader-wrapper"> <div class="loader"></div> </div>
みたいにローダー自体を画像なりcssなりで作って配置し、javascriptで消すという手段。これが私jQuery1系でやってた常套句。
※ローダー自体の作り方は色々出てくるのでここでは割愛。
$(function(){ var loader = $('.loader-wrapper'); $(window).on('load',function(){ loader.fadeOut(); }); setTimeout(function(){ loader.fadeOut(); },5000); });
上記だと、loader-wrapperを最長でも5秒経ったらフェードアウトさせるような記述だが、これはjQuery3系だと効かない。
まあ、もはやcss3でアニメーションだったり色々やれるので、そっちで解決した方が速い。
ということで、javascriptではスタイルシートの制御をやって、css側でフェードアウトのアニメーションを書く。
$(function() { $(window).on("load", function(){ $('.loader-wrapper').addClass('fadeOut'); }); setTimeout(function(){ $('.loader-wrapper').addClass('fadeOut'); },2000); setTimeout(function(){ $('.loader-wrapper').css('z-index','0'); },3000); });
ページを読み込んでから、loader-wrapperというクラス名の要素にfadeOutというクラスを振る。
.fadeOut { animation-name:fadeOut; animation-duration:1s; animation-iteration-count:1; animation-direction:normal; animation-fill-mode:forwards; } @keyframes 'fadeOut' { 0% { opacity:1; } 100% { opacity:0; } }
cssでフェードアウトさせる。
ただ、これだとローダー以降の要素が選択・クリック不可なのでz-indexで順序も変えている。
もっとスマートな方法が見つかるまで、とりあえずの覚書。なんとなく、今後も忘れて嵌りそうなのでメモ。