重い処理を行っているとGIFアニメが止まってしまう

このQ&Aのポイント
  • 重い処理を行っているとGIFアニメが止まってしまう
  • ローディング画面を作成しようと思いスピナーのGIFを用意しました。ページの読み込みが終わった際にHTMLを読み込んで表示しようとしていますが、重い処理を行っているため、GIFアニメが止まってしまいます。
  • サーバー側でHTMLを生成し非同期に読み込んで表示する際、スピナーのGIFアニメが止まってしまう問題が発生しています。処理が重いため、GIFアニメを止めずにHTMLを更新する方法はあるのでしょうか。
回答を見る
  • ベストアンサー

重い処理を行っているとGIFアニメが止まってしまう

お世話になります。 ローディング画面を作成しようと思いスピナーのGIFを用意しました。 <div id="main"> <div id="loading"><img src="spinner.gif" /></div> </div> 上記のような感じで画面遷移した際にはスピナーが表示されるようにして、 ページの読み込みが終わった際に $(window).load(function() { $("#main").load('htmlのURL'); }); のように、htmlを読み込んで表示しようとしています。 実際にはjqueryのajax通信を使って非同期にサーバー側でHTMLを生成してそれを読み込むようにしているのですが、読み込む際にスピナーのGIFアニメが止まってしまいます。 重い処理(サーバー側の処理)を行っているからだと思うのですがGIFアニメをとめずにhtmlを更新することはできないのでしょうか。 よろしくお願いします。

  • rihm
  • お礼率76% (19/25)

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 >重い処理(サーバー側の処理)を行っているからだと思うのですが サーバ側の処理はおそらく関係なく返ってきたHTMLを構成する際、クライアントの処理能力の問題だと思います。 (処理を同時に走らせるとギクシャクするイメージ) 返すHTMLの中身を軽くするとか、HTMLではなく必要最低限な情報をJSON形式で返すとか。 それで改善するかはわかりませんが。

rihm
質問者

お礼

ありがとうございます。 その通りで、HTMLの描画に時間がかかっているようでした。 JSON形式で返すように作ってみます。

関連するQ&A

  • jQueryの処理順序について

    function ajaxAddHtml(target_id) { $('#' + target_id).html('loading.gif'); if(php_func == "") { return false; } // ↓↓↓Ajaxの処理 } jQuery + Ajaxで画面の書き換えをする処理を実装しました。 上記のように、処理の冒頭にまずクリックされたボタンをloading画像に置換する処理を入れているのですが、 PCでは想定通り動きますが、iphoneとAndroidで想定通り動きせん。 loading画像に書き換わる前にAjaxでの処理が完了してしまいます。 関数の中のhtml置換処理を、確実に上の行から順番通りに実行させる方法はありますか?

  • 重い処理中のアニメーションgifについて

    お世話になります。 javascript で重い処理中のプログレス(アニメーションgif)表示について教えてください。 やりたいことは以下です。 ==================================== 1.重い処理の前にプログレス(アニメーションgif)表示 2.重い処理開始 3.プログレス(アニメーションgif)非表示 [sample.html] <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript"> $(function() { $('#btn').click(function() { progressStart(); // プログレス(アニメーションgif)表示 func1(); // 重い処理開始 progressEnd(); // プログレス(アニメーションgif)非表示 }); }); /** * プログレス(アニメーションgif)表示 */ function progressStart() { $('#prog').show(); } /** * プログレス(アニメーションgif)非表示 */ function progressEnd() { $('#prog').hide(); } /** * 重い処理(とりあえず5秒) */ function func1() { var T = 5; //T秒待つ var d1 = new Date().getTime(); var d2 = new Date().getTime(); while( d2 < d1+1000*T ){ d2=new Date().getTime(); } return; } </script> </head> <body> <form> <input type="button" id="btn" value="開始" /> <div id="result"></div> <img id="prog" src="img/loadinfo.gif" alt="" style="display:none;" /> </form> </body> </html> ==================================== 上記コードで試したのですが、 重い処理中はプログレス(アニメーションgif)が動かず固まったままです。。。 重い処理中もプログレス(アニメーションgif)を 動いたままにすることは可能なのでしょうか? どなたかご教授いただければと思います。よろしくお願いいたします。

  • 特定の要素を表示後に次の処理を実施する方法について

    初期表示で、ローディング画像を表示し、div#mainの中にあるすべての画像群が読み込まれてから表示するために、<head>タグ内に以下の処理を入れています。 <script type="text/javascript"> $(function(){ $('#main').css('display', 'none'); //全てのページコンテンツを読み込んだ後に、function内の処理を実行 $(window).load(function(){ $('#loading').remove(); $('#main').fadeIn(700); }); }); </script> 上記処理後、div#mainが表示されたというのを検知してから、次の処理(具体的にはテキスト画像をフェードインさせる)をしたいのですが、方法はありますでしょうか。

  • jqueryでhtmlを読み込んだ後に処理をさせる

    お世話になっております。 javascript初心者で最近、JQueryを使い始めた者です。 lightboxのようなモーダルウインドを作りたく、各ボタンのリンク先のファイルを読み込ませた後に フェードインで読み込ませた要素を表示させたいのですが 以下のソースでは #overLayerにaタグのリンク先のhtmlファイルを読み込ませた後にフェードインさせる処理がうまくいきません。 読み込ませるload1.htmlに画像を入れていると、フェードインしながら画像が読み込まれてしまいます。 画像付きhtmlファイルを画像データも含め完全に読みこみ終わった後に処理をするにはどのようにすればいいでしょうか? ご回答宜しくお願いいたします。 //*****javascriptコード**** <script type="text/javascript"> $(function(){ //bodyに背景レイヤーとボックス表示用のレイヤーを追加 $("body").prepend("<div id='glayLayer'></div><div id='overLayer'></div>"); //$("#overLayer").hide(); //ローディング画像のプリロード $("<img>").attr("src","images/loading.gif"); //背景レイヤークリック時の処理 $("#glayLayer").click(function(){ $(this).hide(); $("#overLayer").fadeOut("slow",function(){ $("#overLayer").html(""); }); }); //リンクボタンクリック時の処理 $("a.modal").click(function(){ $("#glayLayer").show(); $("#overLayer").show(); $("#overLayer").html("<img src='images/loading.gif'>"); $("#overLayer").data("file",$(this).attr("href")); $("#overLayer").load($("#overLayer").data("file"),function(){ //alert("complete"); $("#overLayer").hide(); $("#overLayer").fadeIn(1000); }); return false; }); }); </script> //****htmlソース**** <body> <ul> <li><a href="load1.html" class="modal">テスト1</a></li> </ul> </body>

  • jQuery Ajax通信をランダムで表示

    Ajax通信で別htmlファイルを読み込みたいと考えています。 それぞれ読み込むファイルは、a.html、b.html、c.html、d.htmlとあります。 読み込む先(index.html)の以下div要素内に、 上記htmlを読み込みたいと考えています。 <div id="01"></div> <div id="02"></div> <div id="03"></div> <div id="04"></div> 本来ならAjax通信で以下のように出来るかと思います。 $(function(){  $('#01').load('a.html');  $('#02').load('b.html');  $('#03').load('c.html');  $('#04').load('d.html'); }); しかし、div要素内の表示をランダムにしたいのです。 例)id="01"のところに、b.htmlだったり、d.htmlだったりという感じです。  ロードする度にコンテンツの表示場所が変化するイメージです。 ランダムというところが、どのように対処したらよいのか、手も足も出ません。 どなたか詳しい方、ご教授いただけたら助かります。 何卒、何卒、宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • 外部ファイルでクエリを実行したい

    「クエリを実行している間にローディング画像を表示する」という処理をしたいです。 外部ファイルの[load.php]内で「データベース接続→mysql_queryを実行する」という処理を 行い、[index.php]で結果を表示したいのですが、うまくいきません。 ※load.phpの中身をindex.php内に書いた場合は成功する ※load.phpの読み込み自体はできている。 [index.php] <script type="text/javascript"> $(function(){ $("#sample").load("load.php"); }) </script> <div id=sample> <div id="loader"><img src="edit/img/loader.gif" width="24" height="24" alt="Loading..." /></div> <?php echo $num; ?> </div> [load.php] <?php $conn = mysql_connect("localhost","DB","pass",true); mysql_query("SET NAMES utf8") or die("can not SET NAMES utf8"); mysql_select_db('DB',$conn); $sql = "SELECT ~" $result = mysql_query($sql) or die(mysql_error()); $num = mysql_num_rows($result); ?>

    • ベストアンサー
    • PHP
  • Excelで処理中にアニメを流す

    お世話になります。 現在、ExcelでVBAを勉強中なのですが、とあるマクロで処理を開始すると終了まで約1分近くかかります。その間、次々と画面を処理しているExcel画面を見ているのが、言い方は悪いですが退屈に感じ、こういう処理時間を利用してGIFアニメのようなものを流せないかな?と疑問を抱きました。 そこで質問なのですが 1:処理中にアニメを流すことはできるのか? 2:Webブラウザを使う方法なのか?(それについては少しだけ調べました) 3:具体的にどうすればよいのか?(順序など) をお教えください。 稚拙な質問で恐縮ですが、よろしくお願いいたします。

  • 表示待ち時間に「処理中...」のメッセージを表示させたいのですが

    表示に5秒くらいかかるページを作っています。表示されるまで、「処理中...」のメッセージを表示させたいと思っています。Googleで検索したところ、 http://himajin.moo.jp/java/speed/loading.html というページを見つけまして、下記のように若干変更して書いてみました。 ---- <script language="JavaScript"><!-- function loading(){ document.getElementById("nowload").style.display= "none"; } onload=loading; // --></script> <noscript>表示するにはscriptを有効にしてください。</noscript> <div id="nowload"style="position:absolute;text-align:center;font-size:40px;width:100%"> <b>処理中....</b> </div> <div id="contents"> <?PHP ここに5秒くらいかかるPHP処理 ?> </div> ---- しかし、実行してみると5秒くらい画面に何も表示されず、その後処理し終わった画面が表示されるような挙動です。よく見てみると最終の画面が表示される直前の一瞬「処理中...」の文字が出ているようです。 つまり、「処理中...」の文字をまずはすばやく出して欲しいのに、最終の画面表示とほぼ同時に出力されるような挙動をしています。 まずは「処理中...」の文字を出すにはどうすればいいのでしょうか?ご存知の方、ご教授ください。

  • jQuery 並列load処理

    jQueryで、ページを構成する要素を並列で取得しようと考えています。 「/samples/heavy_function_parts」は5秒後に現在時刻を返す処理です。 下記のようなコードを書くと、div「Info5」が更新されるのが、ページ表示後 25秒後となります。 5秒後にすべての情報の更新が完了することを期待しているのですが、 どのように修正すべきでしょうか? <script type="text/javascript"> $(function(){ $("#Info1").load("/samples/heavy_function_parts"); $("#Info2").load("/samples/heavy_function_parts"); $("#Info3").load("/samples/heavy_function_parts"); $("#Info4").load("/samples/heavy_function_parts"); $("#Info5").load("/samples/heavy_function_parts"); }); </script> <div id="Info1">情報1</div> <div id="Info2">情報2</div> <div id="Info3">情報3</div> <div id="Info4">情報4</div> <div id="Info5">情報5</div>

    • ベストアンサー
    • AJAX
  • アニメGIFのFLASH読み込み

    はじめまして。 画像処理系の仕事をしているのですが、 アニメGIFをFLASHで読み込んだ際、 イラストの一部(線や図形)が欠けた状態で読み込まれてしまいます。 はじめはアニメGIF自体が破損しているのかと思い、 同じようにPhotoshopで読み込こんで、 アニメーションフレームウィンドウを確認したところ、 全く問題なく、読み込めました。 FLASHでの読み込み方法が悪いのか、それとも特殊な読み込み方法があるのか、 どなたか教えてください。。。 OS:Windows7 APPVer:PhotoShop CS5/FLASH CS5 以上、よろしくお願いいたします。