Определение координат элемента относительно всего документа

Координаты элемента определяются посредством свойств offsetTop и offsetLeft элементов. Они содержат значение координат X и Y относительно элемента, на который указывает свойство offsetParent. По идее, это свойство должно указывать на родительский элемент, однако на практике это не всегда так, например, в Firefox оно указывает на корневой элемент, а в Opera на непосредственного родителя. Таким образом при определении координат элемента нужно учитывать offsetParent. Ниже представлены функции, которые выполняют эту задачу:

function pageX(elem) {

	return elem.offsetParent ?
		elem.offsetLeft + pageX( elem.offsetParent ) :
		elem.offsetLeft;

}

// Определение координаты элемента по вертикали
function pageY(elem) {
	return elem.offsetParent ?
		elem.offsetTop + pageY( elem.offsetParent ) :
		elem.offsetTop;
}

Если свойство offsetParent элемента указывает на корневой элемента документа, то сразу же возвращается значение свойств offsetTop или offsetLeft, если же offsetParent не является корневым элементом, то рекурсивно проходятся все элементы вплоть до корневого.

Maklay.com - Большой каталог товаров для спорта и активного отдыха
  • http://vint.od.ua vint

    Столкнулся с такой проблемой – если наш елемент лежит в ДИВе, а тот со скролом, то тут уже этот скрипт неможет точно вычислить координаты :(

  • medved

    2 vint

    а если после определения координат добавлять scrollTop прокрученого DIVa??

  • Николай

    А если елемент лежит в таблице?

  • admin

    С таблицей не пробовал, думаю должно нормально определять.

  • Николай

    не, для элементов таблице не работает

    function getPos(obj)
    {
    var x=0, y=0;
    while(obj) {
    x+=obj.offsetLeft;
    y+=obj.offsetTop;
    obj=obj.offsetParent;
    }
    return {x:x,y:y}
    }

    document.write(’my div’);
    var elem = document.getElementById(”mydiv”);
    var pos = getPos(elem);
    var x = pos.x;
    var y = pos.y;
    document.write( elem.id+” = “+x+”px, “+y+”px”);

JSToolbox создан на основе WordPress