Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Получение координатов объекта


Автор: Noodly 4.10.2009, 15:11
Есть картинка 

<img id="hey" src="./img/sklad.gif">

И есть функция для получения ее координаты икс:  

function getAbsolutePosition(el) {
    var r = { x: el.offsetLeft, y: el.offsetTop };
    if (el.offsetParent) {
        var tmp = getAbsolutePosition(el.offsetParent);
        r.x += tmp.x;
        r.y += tmp.y;
    }
    return r;
}

Если вызывать функцию так:
<a href="javascript:alert(getAbsolutePosition(document.getElementById('hey')).x)">Вычислить координаты слоя!</a>

То она отлично работает. Выдает 300. 
А если я хочу присовить число ее координат другому объекту с помощью:

var startX = getAbsolutePosition(document.getElementById('hey');

То  alert(startX)  выдает значение ноль. Обясните в чем ошибка. 

Автор: Amphiluke 4.10.2009, 15:35
Цитата(Noodly @  4.10.2009,  15:11 Найти цитируемый пост)
var startX = getAbsolutePosition(document.getElementById('hey');


Для начала напишите без ошибок (!), как присваиваете результат функции переменной startX. Во-вторых, имейте в виду, что функция возвращает объект, поэтому alert(startX) покажет [object Object].

Ищите ошибку в своем коде — всё работает при должной аккуратности.
Код

<html>
<head>
<title>qwerty</title>
</head>
<body>
<img id="hey" alt="" src="./img/sklad.gif">
<script type="text/javascript">
function getAbsolutePosition(el) {
    var r = { x: el.offsetLeft, y: el.offsetTop };
    if (el.offsetParent) {
        var tmp = getAbsolutePosition(el.offsetParent);
        r.x += tmp.x;
        r.y += tmp.y;
    }
    return r;
}
var startX = getAbsolutePosition(document.getElementById('hey'));
alert(startX.x);
</script>
</body>
</html>

Автор: Noodly 4.10.2009, 17:34
Собственно да. Ваш код работает. Но когда засовываешь картинку в таблицу, почему-то опять выдает ноль. 
Вот: http://sybyrskiy-valenok.narod.ru/here.html

Картинка "Склад СЗЧ"

Автор: Amphiluke 4.10.2009, 18:21
Вообще, конечно, оригинально оформлен там код... O_o 
Нет даже обязательных дескрипторов <html>, <head>, <body>... Сразу <table>, как топором отрубили! Вообще, страшно, уж простите.
Оформите html-код как следует, без этого точно не будет работать так, как должно. Для IE, возможно, придется перенести все действия, которые должны выполняться после открытия документа, в функцию, которую назначить в качестве обработчика события onload для body.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)