2017-10-15 5 views
0

特定のdivの高さを必要とするスクリプトがあります。セレクタはsetTimeoutの中にしか適切な値を見つけません

問題は、それがsetTimeout関数内の場所でない限り、jQueryのに.height()方法も0の値で、適切な値を返さないです。 だから、この:0

2:この

1で

console.log("1:" + $(slides[0]).find('.slide__inner').height()); 
setTimeout(function(){console.log( 
    "2:" + $(slides[0]).find('.slide__inner').height());} 
, 0); 

結果399 //期待値


今私は、ブラウザの承知していますマルチスレッドのものであり、タイマー要素内の要素は独自の次元で実行されます。b私はこのセレクタをsetTimeoutやタイマー機能を使わずに正しい値を出力させる必要があります。

追加情報:

ターゲットdivの位置絶対的である、関数自体は、特に内のコンテンツ(高さ)の後に火災アップに意味されるすべてのセットです。

編集

これはないWhen should I use jQuery's document.ready function? の複製です。私は、具体的にはEDIT2

が挙げafterLoad関数Fancybox3 JSプラグインの一部である

.... IはsetTimeoutメソッドを使用するwan'tいけないと述べました。スライドの内容は、私が起因するコードのあまりを表示するために許可されていないのです

ロード行われる$ .noop、//:

後負荷:ソースから 読書がhereを見つけました仕事の制限はなく、ブロック自体がthe documentation of the plugin you're usingとあなたの元の質問にあなたのコメントに基づいてafterLoadブロック

+2

document.readyにコードをラップしたり、スクリプトタグをページの下部に配置してみましたか?要素に実際にロードする必要がある画像やその他のコンテンツが含まれている場合は、代わりに – adeneo

+0

'$(document).ready(function(){console.log(" 1: "+ $ (スライド[0])。find( '。slide__inner')。height());}); ' – Roberrrt

+0

同じ効果です。全体の内容が読み込まれた後に起動するfancyboxesの 'afterLoad'関数の中で演奏されます – aln447

答えて

1

の終了によって呼び出されるafterLoad内で宣言resize()、内の場所です、それはあなたのPRのようになります。 oblemはafterLoadの代わりにafterShowコールバックを使用して解決できます。このコールバックは、開いているアニメーションが完了すると呼び出されます。これは、高さのクエリが適切な場合です。

+0

私には分かっていない理由は、プロジェクトにはfancyboxに 'afterShow'関数がないので、別の方法が必要です。 アイデアのおかげでtho – aln447

関連する問題