Здравствуйте, 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).