offsetTop
возвращает значение относительно offsetParent
; вам нужно рекурсивно добавлять offsetParent.offsetTop
через всех родителей, пока offsetParent
не станет null
. Попробуйте использовать метод jQuery offset
()
.
РЕДАКТИРОВАТЬ : Если вы не хотите использовать jQuery, вы можете написать такой метод (без проверки):
function offset(elem) {
if(!elem) elem = this;
var x = elem.offsetLeft;
var y = elem.offsetTop;
while (elem = elem.offsetParent) {
x += elem.offsetLeft;
y += elem.offsetTop;
}
return { left: x, top: y };
}