前提・実現したいこと
IEでHTML読み込み時に走る処理が長いため、ローディングのGIFを表示したいのですが
GIFのアニメーションが動かず、静止画のまま表示がされてしまいます。
画面表示までの流れとしては
対象の画面に遷移⇒ローディング画面表示⇒Javascriptにての処理⇒ローディング画面非表示
といった流れを想定しています。
※GoogleChromeではGIFアニメーションが動いていることを確認しました。
試したこと①(HTMLにGIFアニメーションベタ書き)
- 一番最初に試したこと
- 結果:ローディングのGIFは表示されましたがアニメーションが動きませんでした。
HTML
1<body> 2 <div id='loading'> 3 <!--ここにローディングの画像を表示させます--> 4 <img src="loading.gif"> 5 </div> 6<body> 7 8<script> 9$(document).ready( function(){ 10 //時間のかかる処理を行う 11 hogehoge(); 12 // ローディングのdivを消す 13 $("#loading").remove(); 14 15}); 16 17</script>
試したこと②(Javascript内でGIFを表示するHTMLを作成する)
- 結果:ローディングGIF自体が表示されませんでした。
HTML
1<body> 2 <div id='loading'> 3 </div> 4<body> 5 6<script> 7$(document).ready( function(){ 8 // ローディングのdivに画像を表示する場所を追加する。 9 $("#loading").html('<img src="loading.gif">') 10 11 //時間のかかる処理を行う 12 hogehoge(); 13 14 // ローディングのdivを消す 15 $("#loading").remove(); 16}); 17 18</script>
試したこと③(時間のかかる処理をsetTimeoutで非同期にする)
- 結果:時間のかかる処理を実行するまで(1秒後)はローディングGIFのアニメーションが動きました
HTML
1<body> 2 <div id='loading'> 3 </div> 4<body> 5 6<script> 7$(document).ready( function(){ 8 // ローディングのdivに画像を表示する場所を追加する。 9 $("#loading").html('<img src="loading.gif">') 10 11 //時間のかかる処理を行う(1秒後に実行する) 12 //ローディングのdivを消す処理もこの中に含めました 13 setTimeout(hogehoge(),1000); 14 15}); 16</script>
結果を見ての考察
- IEの仕様としてfunction実行時に描画を一時停止、終了時に一気に描画をしているのではないか
(GoogleChromeはコード単位で随時描画しているからローディングGIFのアニメーションが動くのでは?)
備考(バージョン情報等)
- IEのバージョンは『11』です。
- クライアントの要望で、ブラウザはIE11固定です。
- ユーザに処理時間を意識させないための処置なので、ローディングのGIFでなくともよいです。
- async/Await等はIE対応していないため使ってません(そもそも今回の問題はブラウザの仕様だと思っているからです)
async/Awaitなどの非同期処理を使えば直るということであればBabelの使ってコンパイルすることも視野に入れていきたいです
- JQuery3.3.1を使用しています
参考にさせていただいたサイト
回答4件
あなたの回答
tips
プレビュー