|
|
|
| Здравствуйте.
Стоит задача по показу модального диалога в конкретной точке экрана (под только что нажатой кнопкой).
Для определения позиции нажатой кнопки использую следующие функции:
function GetModalNodeLeft(topParent, node)
{
if (node == null) return 0;
if (node == topParent) return parseInt(node.offsetLeft);
var selfLeft = 0;
selfLeft = parseInt(node.offsetLeft);
return isNaN(selfLeft) ? 0 : selfLeft + GetModalNodeLeft(topParent, node.offsetParent);
}
function GetModalNodeTop(topParent, node)
{
if (node == null) return 0;
if (node == topParent) return parseInt(node.offsetTop);
var selfTop = parseInt(node.offsetTop);
return isNaN(selfTop) ? 0 : selfTop + GetModalNodeTop(topParent, node.offsetParent);
}
Эти функции работают по разному в разных браузерах и при разных стилях верски (табличная или дивная).
Собственно, вопрос: не поделится ли кто-нибудь добрый такими же функциями, но корректно работающими во всех браузерах? | |
|
|
|
|
|
|
|
для: Denis_Gorby
(11.09.2007 в 22:30)
| | совсем запутался в вашем скрипте! Сделайте проще:
function get_coordinates(obj) {
var offsetTop=obj.offsetTop, offsetLeft=obj.offsetLeft, parent=obj.parentNode;
while (parent!=window.document) {
offsetTop += parent.offsetTop;
offsetLeft += parent.offsetLeft;
parent = parent.parentNode;
}
}
|
| |
|
|
|
|
|
|
|
для: Madman
(11.09.2007 в 23:40)
| | >совсем запутался в вашем скрипте! Сделайте проще:
Извините, но ваш более простой скрипт неправилен вообще. Нельзя в этом алгоритме использовать parentNode. Необходим offsetParent. И window.document не всегда тот элемент, на котором нужно останавливать цикл.
Впрочем, мой вопрос был к тем, кто уже имеет реально работающий и проверенный алгоритм, учитывающий глюки Оперы, block и inline элементы и т.д. и т.п. | |
|
|
|
|
|
|
|
для: Denis_Gorby
(12.09.2007 в 11:26)
| | посмотрите скрипт всплывающая подсказка | |
|
|
|
|
|
|
|
для: AlexSol
(12.09.2007 в 11:43)
| | >посмотрите скрипт всплывающая подсказка
Спасибо | |
|
|
|