Здравствуйте, Аноним, Вы писали:
А>Как определить координаты объекта (картинки, таблицы, ячейки) относительно окна.
В IE это можно сделать вот этими двумя функциями:
function GetAbsTop(_obj) {
var _top=0;
var _parent=_obj;
_top+=_parent.offsetTop;
_top+=_parent.clientTop;
do {
_parent=_parent.offsetParent;
_top+=_parent.offsetTop;
_top+=_parent.clientTop;
} while (_parent!==document.body);
return _top-document.body.scrollTop;
}
function GetAbsLeft(_obj) {
var _left=0;
var _parent=_obj;
_left+=_parent.offsetLeft;
_left+=_parent.clientLeft;
do {
_parent=_parent.offsetParent;
_left+=_parent.offsetLeft;
_left+=_parent.clientLeft;
} while (_parent!==document.body);
return _left-document.body.scrollLeft;
}
Передаешь свой обьект(картинку, таблицу, ячейку) параметром _obj, и оно тебе выдаст координату Top или Left относительно окна.
А можно чуть модифицировать для производительности(обе координаты за один проход цикла):
function GetAbsCoords(_obj) {
var _top=0;
var _left=0;
var _parent=_obj;
_top+=_parent.offsetTop;
_top+=_parent.clientTop;
_left+=_parent.offsetLeft;
_left+=_parent.clientLeft;
do {
_parent=_parent.offsetParent;
_top+=_parent.offsetTop;
_top+=_parent.clientTop;
_left+=_parent.offsetLeft;
_left+=_parent.clientLeft;
} while (_parent!==document.body);
return [_top-document.body.scrollTop, _left-document.body.scrollLeft];
}
тогда к примеру:
var MyTableCoords = GetAbsCoords(MyTable);
var MyTableAbsTop = MyTableCoords[0];
var MyTableAbsLeft = MyTableCoords[1];
--
DSD
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).
Здравствуйте, Аноним, Вы писали:
А>Только что проверил твой скрипт — не работает ни в IE, ни в Opera, ни в Firefox
А>Пример, на котором этот скрипт не работает заключается примерно в следующем:
А>В body таблица width=100% height=100% с одной ячейкой с вертикальным и горизонтальным центрированием. А>В этой ячейке есть таблица неизвестной ширины и высоты (растягивается контентом) — тоже с одной ячейкой. А>В этой таблице есть форма, на ней несколько input-ов. А>Координаты этих input-ов определяются неправильно... совершенно неправильно (по вертикали ошибка в сотни пикселей, по горизонтали где-то в 10).
вот вместо избыточного цитирования лучше бы ты исходник своего примера сюда запузырил. а то по твоему описанию его собирать не вижу особого смысла и нет времени.