2012-03-23 9 views
2

$(document).ready(function(){})の要素の位置を取得しようとすると、 ; chromeではposition.topの値が違っていますが、firefoxでは正しくありません。それは、どの要素がポジションを取っているかによって、15-45pxオフになります。

ビューポート内にオーバーフロー:非表示のアイテムのリストがあり、それぞれのアイテムの位置を取得したいとします。

私が$(".viewport .item").each(function() { var pos = this.position(); });を実行すると、値は与えられますが、間違っています。

私はコンソールからこれを行うと(ページが読み込まれた後に)正しい値を返します。間違った値は、$(document).readyの間だけ表示されるようです。

これを解決する手段はありますか?私はまだdoc.ready中に自分の位置を知ることができますか?それらがレンダリングされた後(CSSモジュールにおいてより一般的であり、、)他のoffsetモジュール内の機能のような

+0

てみ 'this.offset()トップを使用してオフにはるかに優れている;'代わり –

+0

が私のために正常に動作し、両方の$ 'の1つの構文エラー以外のFirefox&クロームで'this.position()'の代わりに 'this()' .position() 'を使用してください。 –

+0

両方のブラウザのズームを100%表示にするには' ctrl + 0'を使用してください。 –

答えて

2

position()docs)は、DOM内の要素の実際の位置に依存します。

$(document).ready()は、DOMが構築された直後に発生します。最近のブラウザで
は、それがDOMContentLoadedに対応:

ドキュメントが完全にロードされていると解析され、スタイルシート、画像、およびready

のロードが終了するサブフレームを待たずに、あなたが操作することができましたDOMを安全に(イベントを添付するなど)、それを "測定"すれば問題が生じるかもしれません。例えば、スタイルシートがダウンロードされるのを待たずに、イメージがダウンロードされレンダリングされるのを待つことはありません。

非常に厄介な問題に遭遇しました。これは、非常にプラットフォーム(ブラウザ+ jQueryバージョン)に依存しています。このケースでは、3つのブラウザのうち2つで動作していました。おそらく競合状態であることを示す時間です(JavaScriptはシングルスレッドですが、ブラウザはそうではありません)。

あなたは要素を測定する必要がある場合は、あなたが$(window).load()

関連する問題