код ВАС является совершенно плохо, и я некоторые улучшения на Pacerier, чтобы дать, так что я выложу свой ответ:
function getPos(el, rel)
{
var x=0, y=0;
do {
x += el.offsetLeft;
y += el.offsetTop;
el = el.offsetParent;
}
while (el != rel)
return {x:x, y:y};
}
Если используется только в качестве getPos(myElem)
вернет глобальную позицию. Если в качестве аргумента включен второй элемент (т. Е. getPos(myElem, someAncestor)
), который является предком/родителем первого (по крайней мере, где-то вверх по цепочке), то он будет давать позицию относительно этого предка. Если rel
не дано (т.е. остается undefined
), то она целенаправленно использует !=
вместо !==
, потому что он должен остановиться, когда el
получает null
и rel
является undefined
, так что нестрогое равенство целеустремленный, не изменить , Он также возвращает объект, так как это немного читаемо в использовании, чем массив (и поэтому вы можете сделать что-то вроде getPos().x
).
Это происходит от решения Pacerier, поэтому, если вы собираетесь продвигать это, подумайте о его продолжении.
Привет, Марк, спасибо за ваш код, но когда страница имеет запас в b ody, позиция isnt corrent больше, у вас есть решение для этого? Заранее спасибо – Johnny
как насчет добавления 'document.body.offsetLeft' и' document.body.offsetTop' к возвращаемым значениям? – YOU
Это должно работать нормально, независимо от полей кузова. Убедитесь, что вы используете доктрину режима стандартов. В Quirks все ставки отключены. – bobince