jQueryで行う初期表示処理について

このQ&Aのポイント
  • jQueryを使用して画面読み込み時の初期表示処理を行う場合、ブラウザの表示に影響が出る可能性があります。
  • 以前のシステム開発では、JavaScriptを使用して初期表示処理を行った結果、一瞬見えた後に非表示になったり、色がつかない状態が一瞬見えた後に色がついたりするという挙動が起きました。
  • jQueryはDOMツリー構築後に処理が開始されるとされていますが、それでも初期表示処理による見た目の変化が生じる可能性があるため注意が必要です。
回答を見る
  • ベストアンサー

jQueryで行う初期表示処理について

いつもお世話になります。 jqueryで画面読み込み時でDHTMLを処理する場合(表示・非表示、タグの作成などなど)、ブラウザでの表示に影響はでるものでしょうか? ※画面読み込み時・・・$(function() {.......}); で処理を記述 とういのも以前、jqueryではなく普通にjavascriptを使用して、初期表示処理をごりごり書いたシステム開発に携わったことがあるのですが、 一瞬見えた後非表示になったり、色がなにもついていない状態が一瞬見えた後、色がついたり、、、といった挙動をしていました。 jqueryは、domツリー構築後に処理が開始されると書いている記事を見たことがあるのですが、その場合でも、先に述べたような見え方をするのでしょうか? それともDHTMLによるクライアントサイドでの動的な処理は、全て完了した状態でブラウザに表示されるのでしょうか? 宜しくお願いします。

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

  • ベストアンサー
  • tracer
  • ベストアンサー率41% (255/621)
回答No.3

jQueryのready関数は、すべてのHTMLソースを読み込んだ後に実行されますが、レンダリング前に実行されるはずです。ただ、それでもJSの書き方によっては、一瞬見えたりする場合もあるかと思います。他の方も回答されていますが、要はJSの書き方次第です。 どうしても見せたくないものがあるなら、CSSのdisplayやvisibilityなどで非表示の初期状態を作っておいて(JS実行前は要素が見えない状態)、JS実行時にCSSの値を変更すればよいかと思います。

kamakuragengorou
質問者

お礼

返答ありがとうございます。 > それでもJSの書き方によっては、一瞬見えたりする場合もある jQueryはレンダリング前に実行されるということですが、具体的にはどういった書き方の場合に一瞬見えたりするのでしょうか。 ふと思ったのですが、書き方だけでなく、端末の性能、表示の際の負荷状況なども影響するのかなと思ったのですが、どうでしょうか。 宜しくお願いします。

その他の回答 (2)

  • anyhelp
  • ベストアンサー率43% (79/180)
回答No.2

イベントの処理の問題ですね。かなり極端な話、ただ書いただけだとhtmlが読まれた順に実行される訳ですから、エラーや表示の問題は多々起きます。この辺はjqueryが誕生する以前から変わってません。ブラウザがトリガーするイベントを然るべきタイミングで聞いてあげれば、表示タイミングの問題は解決出来ます。

kamakuragengorou
質問者

お礼

返答ありがとうございます。 > ブラウザがトリガーするイベントを然るべきタイミングで聞いてあげれば、表示タイミングの問題は解決出来ます。 どのタイミングだとOK あるいは NGなのでしょうか。具体的な処理で教えて頂けると嬉しいのですが。。。 javascriptはあまり詳しくなく、最近jQueryを触って便利だな、と感じたくらいで、よろしければ教えて頂けないでしょうか。

回答No.1

それは、jQueryであれJavascriptであれ、作り方の問題だと思うのですが・・・。 DOMツリーに追加するタイミングの問題だと思いますよ 途中段階が見えちゃうっていうのはwww

関連するQ&A

  • jQueryでの書き方について

    HTMLファイルから読み込まれるJavaScriptファイルに次のような書き方がありました。 (function($){ $(function(){ // DOM操作などの処理を記述 ... ... }); })(jQuery); このような書き方を初めて見たのですが、これはどのような意図があるのでしょうか? HTMLの読み込みが完了してから処理を始めるように、次のような書き方はよく見るのですが、これとは何が違い、どう使い分けるのでしょうか? $(function(){ // DOM操作などの処理を記述 ... ... }); ■環境 jQuery 2.1.3

  • jQueryのメリットについて質問

    「jQueryはたくさんのブラウザの挙動を標準化する」「jQueryでDOM操作できることがメリットである」のメリットがありますが、どのサイトを何回見てもこの意味が理解できません。どのサイトにも同じ文章が書いてあり、回答方法が専門用語となっていてわかりづらいため、素人でもわかるように教えていただけませんでしょうか。

  • jQuery 同じ処理を関数にまとめたい

    jQueryでプログラムを書いています。 同じ処理が複数出てきているので一まとめにしてて見やすくしたいのですが・・・・ やり方がわかりません。 たとえば、 $("#id1").on("click",function(){ var num1=1; var num2=2; var a; a=num1 + num2; alert(a); }) $("#id2).on("hover",function(){ var num3=3; var num4=4; var b; b=num3 + num4; alert(b) }) のようにほぼ同じ処理を違うイベントで行う場合です。 関数自体は作れるのですが、、、、 function calc(numa,numb){ alert(numa+numb); } jquery内でjavascript(Java?)の関数は使えないというのを聞いたことがあります。 どのようにすれば使ええるのでしょうか?

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

    表示に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の多重読込

    2つのHTMLがあり、両方ともjQueryプラグインを使っています。 今回、a.html側に、jQuery loadで、b.htmlを読込みました。 ■a.html jQuery 本体 jQueryUI jQueryForm jQuery.HashChanged など基本js(多数) ■b.html jQuery.Gallerific jQuery.Fancybox jQuery.fixPing などメディア系統js(多数) ■困っていること 両方とも、$(function(){ ... }) 構文を使って、DOMの展開完了を待っているのですが、「読込まれる側=b,html」の、$(function(){ ... }) がうまく働いていないようなのです。 b.html 単体では何の問題もないのですが、a.htmlにloadされると、遅延読み込みがききません。 元である a.html で全部のjQuery プラグインを読むのは重すぎるため、各々で必要なプラグインを都度、読むようにしたいのですが、その場合、読み込まれる側の実行遅延(DOM展待ち)はどのようにしたらいいでしょうか?

  • Jqueryのキャッシュについて

    JqueryからCGIを呼び出して、DBと接続し、その戻り値をHTMLページに反映しています。 処理をして、ブラウザを再起動すると処理されたデータで表示されるのですが、ブラウザを再起動しないと、処理する前のデータが表示されます。ページをリロードしても同じです。 下記のようにCGIを呼び出してDBと接続をしているのですが、 キャッシュがあると良くないと言うことが書いてあったので、 cache: false, を追加したり、 $.ajax({ type: 'GET', url: '~.cgi', cache: false, //←追加 data: ''', success: function(result){ if (result != ''){ 処理をする } } $.ajaxSetup({ cache: false }); ↑を追加してみたりしたのですが、これらの部分からあとのプログラムが動きません。 (エラーになっている?ような感じです) これらを削除してプログラムを動かすと、キャッシュが残っているような結果が帰ってきます。 要するに、DBの値を修正、削除をして、その後のデータを表示したいのですが、 削除後、修正後のデータが表示されません。 ブラウザを再起動すると、修正、削除されている状態で表示されます。 ブラウザを再起動しなくても処理をした後の結果がHTMLページに表示されるようにしたいです。 わかりにくい説明で申し訳ございませんが、ご不明な点はお聞き下さい。 どなたかおわかりになる方がいらっしゃいましたら教えて下さい。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • skitter(jquery)での初期表示画像

    skitter(jquery)で画面を開いた時に移動した状態で開くことは出来ますでしょうか。 たとえば20個画像があって、画面を開いた時に10番目の画像を表示を表示し、 サムネイル一覧も10番目の画像がアクティブになっている状態にしたいです。 image_iに10を渡すとかjumpToImageを呼び出すとか試したんですけど、 どうにもうまくできません。 お願いいたします。

  • jQueryの仕組みについて質問です

    お世話になります。現在jQueryのコードを読んでいるのですが、どうしてもわからないところがあります。 jQuery1.11.1の2774行目、jQuery.merge(...)と自分自身を呼び出していますが、これはjQuery中でどのような処理をして実現しているのでしょうか?jQuery.merge = function(){...};としているわけでもないのに呼び出せているのが理解できません。 mergeメソッド自体は、450行目、jQuery.extend内で定義されているようです。 以下簡易化したjQueryです。 var window = this; // ブラウザ以外で実行する場合のみ必要 (function(){ jQuery = window.jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context ); }; jQuery.fn = jQuery.prototype = { hello: function(){ console.log("hello from fn!"); // ここをjQuery.logと書けるようにしたい } }; jQuery.extend = jQuery.fn.extend = function() {}; jQuery.extend({ log: function(msg){ console.log(msg); } }); init = jQuery.fn.init = function( selector, context ) { console.log("Hello"); }; init.prototype = jQuery.fn; // ここをjQuery.logと書けるようにしたい } )(); jQuery().hello();

  • PHPとjquery

    PHPの内部処理をjqueryを使ってブラウザ上で進捗状況をリアルタイムで見せてくれるようなものは作れますか? jqueryで動的なwebページを作れると聞いての質問なのですが。jqueryは少ししか触っていません 例えば <?php $i = 1; while( $i <= 10 ){ echo "実行中<br>\n"; $i++; sleep(5); } ?> というプログラムがあって、普通に実行したらまとめて10個の"実行中"が表示されるだけですが、これをプログラム処理と同期させてページを更新させること無しに一つづつブラウザに表示させて行くというような処理は可能なのでしょうか?教えてください

  • jQueryリサイズ処理と記述でご指摘ください。

    jQueryプラグインで、「mLivre」というプラグインを使っております。 ※mLivre:[JS]雑誌をめくるようにぺらっと画像を表示するスクリプト http://coliss.com/articles/build-websites/operation/javascript/jquery-plugin-mlivre.html 「mLivre」は画像をめくるように表示してくれるプラグインです。 このプラグインをレスポンシブにしたいと思い、リサイズ命令でブラウザサイズに合わせて 大きさを変えていきたいと思っております。 現時点で画像の表示自体はリサイズ出来ておりますが、 ページをめくる動作でアニメーションの表示が上手くいきません。 一番初めの数値(ページを開いた時点での数値)を記憶しているのか、 一番初めに表示されていた場所から画像がめくられてしまいます。 (説明が下手で申し訳ございません) 素人で恐縮ですが、私の記述で間違っているところがあり 私自身、間違いに気付けない状態です。 下記にコードを記述いたしました。 ご指摘いただければと思います。 ---------「mLivre」呼び出し部---------- jQuery(function() { var imgWi; var imgHi; var winWi; var scaleWi; var setWi; var setHi; setSize(); jQuery('#slide').mLivre({ pageDefault:0, over:true, loader:true, eventLoad:null, eventOpen:null, width:setWi, height:setHi, dossier:'http://URL/images/slide/', //画像 }); function setSize() { //画像サイズ指定 imgWi = 500; imgHi = 375; winWi = jQuery( '#branding' ).width(); scaleWi = winWi / imgWi; setWi = winWi; setHi = imgHi * scaleWi; jQuery("#slide img").width(setWi); //画像の大きさ jQuery("#slide img").height(setHi); } }); ------「mLivre」コア部---------- //11行目はじまり (function(jQuery) { jQuery.fn.mLivre = function(options,num) { switch (options) { //switch部 略 // break; } //↓追加したリサイズ部 jQuery(window).resize(function(){ var imgWi; var imgHi; var winWi; var scaleWi; var setWi; var setHi; imgWi = 500; imgHi = 375; winWi = jQuery( '#branding' ).width(); scaleWi = winWi / imgWi; setWi = winWi; setHi = imgHi * scaleWi; jQuery("#slide img").width(setWi); //画像の大きさ jQuery("#slide img").height(setHi); var opts = jQuery.extend({}, jQuery.fn.mLivre.defaults, options); jQuery(this).each(function() { var $obj=jQuery(this); opts.width = setWi; opts.height = setHi; jQuery(".mLivre").width(setWi); //プラグインの大きさ jQuery(".mLivre").height(setHi); }); }); //↓元々の記述、変更していません var opts = jQuery.extend({}, jQuery.fn.mLivre.defaults, options); jQuery(this).each(function() { var $obj=jQuery(this); //省略 })(jQuery); var mLivre={ //ここからが処理部(アニメーション)だと思います。(変更していません) progress:false, //省略 }); } }

専門家に質問してみよう