カスタム要素「テーブル」の行に情報を表示するPolymerアプリケーションを作成しています。私は最初に要素を配置するためにポリマーフレックスボックスクラスを使用しています。要素がロードされた後、JSで測定を行い、それに応じてテーブルの要素に幅を割り当てる必要があります。問題は、このような何かを行く:CSSとJSでdivディメンションを動的に設定すると、読み込み時間が長くなるのをどのように補正できますか?
row 1
*--------------------*
| *-----------*|
| | el a ||
| *-----------*|
*--------------------*
row 2
*--------------------*
| *------*|
| | el b ||
| *------*|
*--------------------*
行1、行2は、固定幅を持っていますが、エルa
またはb
は、任意の幅のものであってもよいです。 el a
またはb
の内容にかかわらず、行に含まれるelはすべて同じ幅にする必要があります。したがって、この場合、a
が最も広く、el b
はその幅をa
に合わせて調整する必要があります。
私はポリマーを使用して、scrollWidth
をJSで測定する前に要素がロードされていることを確認しています。 querySelector
で取得しようとしたときに、未定義の要素を取得するという問題に直面しましたが、Polymerのasync
を使用してこれを修正しました。私は現代のブラウザでうまく要素をスタイルすることができます。次のコードを考えてみましょう。
attached: {
this.async(function() {
console.log(Polymer.dom(this.root).querySelector('#a').scrollWidth);
console.log(Polymer.dom(this.root).querySelector('#b').scrollWidth);
}, 100);
}
クロムの現代版はa
とb
ため60PXため100pxにのようなものを返します。私が古いバージョンのchromeやfirefoxのような別のブラウザをテストすると、a
とb
は、現代のクロムを測定したものよりも5-15px少なくなります。ブラウザーの年齢に関係なく、非同期の時間を十分に長くすると、現代のクロームが返されたものと一致する測定値が最終的に得られることが分かりました。これは、ページにdivが存在し、私がquerySelector
とつかむことができるように見える間に、それはまだ完全な幅ではないように変動しているようです。
測定を行う前に要素が完全にロードされるのにどれくらいの時間がかかるかわかりません。要素がロードされているか、おそらく見過ごされているこれらの要素をスタイリングする別の方法であるかを100%確信できる方法を見つけようとしています。私は測定をして、同じことを何度も連続して測定するのを待っている機能にsetTimeout
を使用して最も成功しました。しかし、それでも時々矛盾していることがあります。時折、b
は、ウェブページが表示されるときには、a
よりもわずかに幅が狭くなります。
私は本質的に無期限にチェックしています。私はかなりうまく動作しているcss-element-queriesでリサイズセンサーを使用することにしました。コンテナの幅よりも後ろにある場合は、scrollWidthがひどいです。 –