を使用して DIV を動的に作成し、document.createElement
内部テキストを追加して、その高さと幅を決定したいとします。offsetWidth
DIV を DOM ツリーに追加する前は、やなどのプロパティoffsetHeight
が 0 であることがわかりますが、これは想定どおりです。プログラムでツリーに追加されたら、それらのプロパティがすぐに「準備完了」になると期待できますか? それとも、再描画/リフローが遅れて後で発生する可能性がある環境はありますか?
textDiv = document.createElement("div");
textDiv.innerHTML = "some dynamically created string";
console.log(textDiv.offsetWidth); // 0
document.body.appendChild(textDiv);
console.log(textDiv.offsetWidth); // OK?
答えは、「JavaScript インタープリターはシングルスレッドであり、appendChild によってトリガーされる再描画/リフロー イベントはそのスレッドの一部であり、次のステートメントに進む前に終了する」のようなものになると思いますが、誰かが私の理解を確認できますか?
このOpera の記事には、私が探しているものがたくさんありますが、それがどのように Opera 固有のものであるかは明確ではありません。いずれにせよ、アプリケーション開発者は、offsetWidth にアクセスするなどして測定を行うときに、必要な再描画/リフローが正しく行われると想定できるようです。