質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

2037閲覧

画像の要素の高さをclientHeightで得ますが

pinkpink

総合スコア7

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/11/03 02:24

編集2021/11/03 02:28

imgをcreateElementで動的生成してappendします
画像のheightはautoとします
この場合、imgが読込完了しないと正確なclientHeightは取れないんでしょうか

色々錯誤しましたが、取れたり取れなかったりとアンバランスなようなのですが。
1は画像が読込完了した時点でclientHeight
2は生成した時点でclientHeight
違うが生まれるのは読込完了しないと正確な高さが取得できないという認識でいいでしょうか

<script> window.onload=function(){ image=document.createElement("img"); image.id="img_obj"; image.src="";//あえて超巨大画像を指定する image.style.height="auto"; 1 image.addEventListener('load', function() {//読込完了する前に2が実行されると想定する alert(this.clientHeight);//2の高さと違ったりする }); document.body.append(image); alert(img_obj.clientHeight);//2 } </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

js

1image = document.createElement("img"); 2image.src = "https://picsum.photos/700/500/?random"; 3document.body.append(image); 4test = () => { 5 console.log(image.clientHeight, image.complete); 6 if (!image.complete || !image.clientHeight) setTimeout(test, 0) 7}; 8test();

というコードを試してみたところ、完全に同時ではないようでしたが、タスク処理の関係のようにも思えます。
仕様については、他の回答を待ちたいと思いますが、itagagakiさんがおっしゃるように、ないものを得ることはできないだろうと思います。
確認していませんが、プログレッシブ方式JPGやインターレース方式PNGなどならば、ワンチャンあるかもですね。


なお、重複質問の方は速やかに削除リクエストを出していただくことを望んています。


インターレース方式PNGについて追記

インターレース方式PNG で試してみたところ、読み込み完了前にclientHeightを取得できていることが確認できました。
ログ

投稿2021/11/06 02:36

編集2021/11/06 03:15
Lhankor_Mhy

総合スコア36960

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

何かで挙動が定義されているものかどうか私は知らないので正確な答えを持ち合わせてはいませんが、定義されていなければ、それはブラウザの実装によるのではないでしょうか。そして常識的に考えてロードする前の画像のサイズがわかるわけがないと思います。ロード完了を待って正しく取得できるのなら、それが正しい値かどうかが保証されるとまでは言えませんが、現実には何ら問題は無いように思うので、質問が何を課題としているのかわかりません。

投稿2021/11/06 02:10

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinkpink

2021/11/06 02:28

常識的ですか、、、 イメージタグを生成する場合ロードを待たないと次の処理に進めない仕様にするのが常識だったのですね
itagagaki

2021/11/06 02:30

違います。ロードしていないもののサイズがわかるはずがないというのが常識です。 そのサイズに依存する処理には進めないでしょう。 それ以外の処理は非同期に実行できるでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問