Re: Как определить координаты объекта в IE
От: Аноним  
Дата: 13.03.06 17:56
Оценка:
Здравствуйте, DSD, Вы писали:

DSD>Здравствуйте, Аноним, Вы писали:


А>>Как определить координаты объекта (картинки, таблицы, ячейки) относительно окна.


DSD>В IE это можно сделать вот этими двумя функциями:

DSD>

DSD>  function GetAbsTop(_obj) {
DSD>     var _top=0;
DSD>     var _parent=_obj;
DSD>         _top+=_parent.offsetTop;
DSD>         _top+=_parent.clientTop;
DSD>     do {
DSD>         _parent=_parent.offsetParent;
DSD>         _top+=_parent.offsetTop;
DSD>         _top+=_parent.clientTop;
DSD>     } while (_parent!==document.body);
DSD>     return _top-document.body.scrollTop;
DSD>  }

DSD>  function GetAbsLeft(_obj) {
DSD>     var _left=0;
DSD>     var _parent=_obj;
DSD>         _left+=_parent.offsetLeft;
DSD>         _left+=_parent.clientLeft;
DSD>     do {
DSD>         _parent=_parent.offsetParent;
DSD>         _left+=_parent.offsetLeft;
DSD>         _left+=_parent.clientLeft;
DSD>     } while (_parent!==document.body);
DSD>     return _left-document.body.scrollLeft;
DSD>  }

DSD>



DSD>Передаешь свой обьект(картинку, таблицу, ячейку) параметром _obj, и оно тебе выдаст координату Top или Left относительно окна.


DSD>А можно чуть модифицировать для производительности(обе координаты за один проход цикла):

DSD>

DSD>  function GetAbsCoords(_obj) {
DSD>     var _top=0;
DSD>     var _left=0;
DSD>     var _parent=_obj;
DSD>         _top+=_parent.offsetTop;
DSD>         _top+=_parent.clientTop;
DSD>         _left+=_parent.offsetLeft;
DSD>         _left+=_parent.clientLeft;
DSD>     do {
DSD>         _parent=_parent.offsetParent;
DSD>         _top+=_parent.offsetTop;
DSD>         _top+=_parent.clientTop;
DSD>         _left+=_parent.offsetLeft;
DSD>         _left+=_parent.clientLeft;
DSD>     } while (_parent!==document.body);
DSD>     return [_top-document.body.scrollTop, _left-document.body.scrollLeft];
DSD>  }

DSD>


DSD>тогда к примеру:


DSD>

DSD>  var MyTableCoords = GetAbsCoords(MyTable);
DSD>  var MyTableAbsTop = MyTableCoords[0];
DSD>  var MyTableAbsLeft = MyTableCoords[1];

DSD>


Только что проверил твой скрипт — не работает ни в IE, ни в Opera, ни в Firefox

Пример, на котором этот скрипт не работает заключается примерно в следующем:

В body таблица width=100% height=100% с одной ячейкой с вертикальным и горизонтальным центрированием.
В этой ячейке есть таблица неизвестной ширины и высоты (растягивается контентом) — тоже с одной ячейкой.
В этой таблице есть форма, на ней несколько input-ов.
Координаты этих input-ов определяются неправильно... совершенно неправильно (по вертикали ошибка в сотни пикселей, по горизонтали где-то в 10).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.