var getXY = function() {
// IE かどうかを判定
if (document.documentElement.getBoundingClientRect) {
// 注 1
return function(el) {
var box = el.getBoundingClientRect();
var rootNode = el.ownerDocument;
親No de = el.offsetParent > // 決定します。 Safari でノードが絶対かどうか,
// 親要素が body かどうか
// 注 2.
var accountforBody = > Y.Dom.getStyle(el, 'position') == 'absolute '&&
el.offsetparent == el.OwnDocument.body); 🎜> y.DOM.GetStyle (Parentnode, 'Position')
== 'Absolute') {
AccountForbody = True;
}
Parentnode = Parentnode.OffsetParent; 🎜> }
// これは针对 Safari の
if (accountForBody) { //この場合、safari doubles
pos[0] -= el.ownerDocument.body.offセット左;
pos[1] -= el.ownerDocument.body.offsetTop;
}
parentNode = el.parentNode;
// スクロールされた祖先を考慮します
while ( parentNode.tagName &&
!patterns.ROOT_TAG.test(parentNode.tagName ) )
{
// operaインラインでの回避策/table scrollLeft/Top bug
// 注3.
if (Y.Dom.getStyle(parentNode, 'display')
.search(/^inline|table-row.*$/i)) {
pos[0] -= parentNode.scrollLeft ;
pos[1] -= parentNode.scrollTop;
parentNode = parentNode.parentNode;
}
戻り位置;
};
}
}() // 注: ロード時間分岐の実行中。 IE の getBoundingClientRect メソッドに関しては、ここを参照してください。 Safari のバグについては、こちらを参照してください。
コメント。 参见老外的原话(出处):
「- 親がインラインまたはテーブルである場合を除き、親のスクロールを削除します。
Operaのインライン/テーブルのスクロール左/上のバグを回避します」
Opera 9.5で修正されました。 (また、Opera 9.5 は getBoundingClientRect
と getClientRects をサポートしています。) 最後に、より多くの DOM の互換性があり、PPK の完全構造 (怎么また他) を参照できます。