JavaScriptで画像の読み込みを待つ
質問
私は、画像のパスを含むいくつかの情報を私に返すAjaxコールを作っています。
私はポップアップとして表示されるHTMLにこれらの情報をすべて準備します。ポップアップのdivの表示をhiddenからvisibleに切り替えるだけです。
popup divの位置を設定するために、画像の高さに応じて計算する必要があります。ですから、位置を設定し、可視性に切り替える前に、画像の寸法を知るために画像がロードされるのを待つ必要があります。
再帰、setTimeout、imgプロパティの補完、whileループ...といったトリックを試しましたが、成功しませんでした。
では、どうすればいいのでしょうか?多分、私は私のAjax呼び出しで寸法を返すべきです。
どのように解決するのですか?
var img = new Image();
img.onload = function() { alert("Height: " + this.height); }
img.src = "http://path/to/image.jpg";
なお、上記の順番で行うことが重要です。
最初に
ハンドラをアタッチします。
次に
を設定します。
src
. もしこれを逆に行い、画像がキャッシュにある場合、イベントを見逃す可能性があります。JavaScript はブラウザではシングルスレッドで実行されますが(ウェブワーカーを使っている場合を除く)、その際
ブラウザー
はシングルスレッドではありません。ブラウザで完全に有効なのは
src
を見て、リソースが利用可能であることを確認し、それをロードし、イベントをトリガーし、要素を見てコールバックのためにキューに入れる必要があるハンドラがあるかどうかを確認し、何も見ず、イベント処理を完了することは、ブラウザにとって完全に妥当であり、すべて
src
の行とハンドラを追加する行の間です。(コールバックが登録されている場合は行の間で発生せず、キューで待機しますが、何もない場合はイベントを待機する必要はありません)。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] これは純関数ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] JS - base64コードから画像の幅と高さを取得する