これらのDOM要素のプロパティのうち、ブラウザにリフロー操作を実行させる可能性があるのはどれですか?
innerHTML
offsetParent
style
scrollTop
これらのDOM要素のプロパティのうち、ブラウザにリフロー操作を実行させる可能性があるのはどれですか?
innerHTML
offsetParent
style
scrollTop
一言で言えば、要素のサイズや移動を引き起こすプロパティは、サイズや位置の変更が他の要素に影響を与える可能性があるため、リフローを引き起こします。ブラウザは、リフローが必要になる可能性のあるものを特定するために可能な限り効率的になるように努力しますが、それを行う方法はそれぞれ異なります。
背景色などの要素のサイズや位置に影響を与えないプロパティは、リフローをトリガーしないはずですが、すべてのブラウザーがこれを実装するのに十分スマートであるという保証はありません。
あなたのリスト:
innerHTML
オブジェクトのHTMLを変更します。これは確かにサイズと位置に影響を与える可能性があり、少なくとも部分的なリフローをトリガーします。
offsetParent
私には、直接設定したものではない読み取り専用プロパティのように見えるので、他の方法でまだスケジュールされていない場合は、それを読み取ってもリフローは発生しません。
style
は、多くのプロパティへのゲートウェイでheight
あり、width
これは明らかに少なくとも部分的なリフローにつながります。
scrollTop
通常、レイアウトは変更されず、1つの要素(およびその子)のスクロール位置だけが変更されるため、リフローを発生させる必要はありません。レイアウトは同じままで、再ペイントが必要です。
リフローにつながるほとんどのプロパティは、すぐにはそのリフローを引き起こさず、むしろ将来の短い時間にリフローをスケジュールすることも言う価値があります。このように、それぞれがリフローを必要とする一連の異なるプロパティを変更するJavaScriptが実行された場合、ブラウザはN回のリフローを実行せず、リフローをスケジュールし、実行の現在のjavascriptスレッドが終了するのを待ちます。次に、必要なリフローを1回だけ実行します。読み取ったときに、保留中のすべてのリフローが現在実行される原因となるプロパティがいくつかあります。これは、リフローがすぐに実行されない場合、これらのプロパティの値が不正確になる可能性があるためです。これについては、この以前の投稿で読むことができます:javascriptdom操作後にInternetExplorerでDOMを強制的に更新する
不思議なことに、それらすべてがリフローやリペイントを引き起こすと確信しています。
これがすべてについての記事です: リフローとリペイント
場合によります。
innerHTML
DOMを変更するように設定した場合にのみ、リフローがトリガーされます。offsetParent
何もしないでください。取得すると、レンダリングツリーキューがフラッシュされる可能性があります。style
それ(またはそのプロパティ)を設定するとき、またはそれらのアクションを連鎖させるときに、リフローと再ペイントをトリガーする可能性があります。のような一部のプロパティは、color
再描画のみをトリガーする必要があります。scrollTop
設定時に再描画をトリガーし、それを取得するとキューがフラッシュされる可能性があります。