質問: jQueryのoffsetメソッドで位置情報を取得したら小数点で返ってきました。 これまでは整数が返ってきていた(と思っていた)ので驚きました。 **jQuery バージョン** ・1系 **質問1** ・何か仕様上の変更があったのでしょうか? ・それとも以前から、位置情報は小数点で返ってくるものなのでしょうか? ・遭遇したケースが、たまたま整数戻り値だっただけ? ・ブラウザ位置情報が小数点で返ってくるのは以前からそういう仕様だったのか、知りたいです **質問2** ・ここら辺りの挙動は、何をどうやって確認すれば良いでしょうか?(何に依存している?) ・jQueryバージョン? ・ブラウザバージョン? ・両方?
回答: 小数点数が返ってきそうなサンプルを作ってみました。 ``` var atop = $('#a').offset().top; $('#ta').val(atop); var btop = $('#b').offset().top; $('#tb').val(btop); ``` ``` #b { margin-top: 20.5px; } ``` ``` a b ta tb ``` 手元のChromeではtbが60.5、Firefoxでは61になります。 まず、CSS等での指定では、pxについても小数点数以下で計算しているようで、%で指定したときやズームの時に違いが出るようです。 ですので、pxに小数点数が現れること自体はおかしいことではないようです。 また、jQueryのソースを見ると、pageYOffsetやclientTopなどのプロパティ値で計算しているようです。計算上pxが整数でないとき、各プロパティ値について、レンダリング上の整数値を返すのか、内部計算での小数点数を返すのかでブラウザ毎に違いが出ているのだと思います。ただ、詳しい資料は見つけられませんでしたので、どちらが本来正しい動きなのかは分かりませんでした。 以上を踏まえてまとめますと、 質問1への回答 jQuery1.6.4にしても動作が同じですので、以前からだったようです。ただ、ChromeかつCSS等でpxが整数値にならない場合でないとでなかったため、気付かなかったと思います。 質問2への回答 私が調べる限り、ブラウザ依存のようです。ただ、pxが常に整数値になる場合は、ブラウザに関係なく整数になります。