jQuery.position()メソッド値が取得されないセキュリティ置換メソッド

1125 ワード

jQueryを呼び出すposition()メソッドは親要素に対する位置を返し、jQueryの公式ドキュメントには次のように記述されています.offset()の方法が違います.offset()はdocumentに対する位置を返す.position()は、親要素に対する位置を返します.
しかし、実際には、使用中に発見されました.position()が返す値は常に0です.しかし、事実は0ではない.特にGoogleブラウザとIEブラウザにあります.火狐ブラウザではこの問題はありません.
その理由を究明すると、Webkitベースのブラウザ(GoogleブラウザとSafariブラウザ)を例にとると、要素(画像、flashなど)が完全にロードされると、ブラウザはこれらの要素の高さと幅にアクセスすることができ、火狐ブラウザはDOMロードが完了した後にこれらの属性を尋ねることができ、この要素の完全なサイズを知る必要はありません.Googleブラウザはだめです.だからグーグル/IEのようなブラウザで、使いたいなら.position()は要素のオフセット量を取得し、値が初期値:0であることが多い.
あなたを救う方法があります.position()呼び出しは$(window)に置く.load()イベントがトリガーされた後、$(document)ではありません.ready事件の後.しかし、この方法も必ずしも信頼できるとは限らない.
もう一つの融通のきく方法は用いる.offset()で換算:
 
  
jQuery.fn.aPosition = function() {
    thisLeft = this.offset().left;
    thisTop = this.offset().top;
    thisParent = this.parent();

    parentLeft = thisParent.offset().left;
    parentTop = thisParent.offset().top;

    return {
        left: thisLeft-parentLeft,
        top: thisTop-parentTop
    };
};


これは余計なコードが生成されますが、信頼性が高く、安心して使えます.