Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение координат картинки, как сделать 
:(
    Опции темы
proger
Дата 14.8.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 10.10.2004

Репутация: нет
Всего: 1



Нас странице много таблиц и внутри одной из таблиц есть картинка, как определитьее координаты???
document.getElementById(id+'_img').offsetLeft выводит не ту координату!
PM MAIL   Вверх
skyboy
Дата 14.8.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



проверить совсем некак, однако вопрос: может, тебе возвращается сдвиг относительно родителя, а не страницы? И тогда есть смысл прибавить offsetLeft для parentNode?
PM MAIL   Вверх
vasac
Дата 14.8.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



Скорее всего это координата, относительно родительского объекта.
Попробуй пройтись по предкам до корня, суммируя offsetLength

-- опоздал  smile 

Это сообщение отредактировал(а) vasac - 14.8.2006, 14:28
PM WWW   Вверх
proger
Дата 14.8.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 10.10.2004

Репутация: нет
Всего: 1



vasac, 
А как это сделать???

Добавлено @ 14:30 
vasac, можно пример???
PM MAIL   Вверх
skyboy
Дата 14.8.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



Код

var offset= 0;
var el= document.getelementById('zzzz'); // вышли на "наш" элемент
while(el!= undefined && el.offsetLeft!= undefined) // если у нас текущий элемент(родитель родителя или ещё более замороченные родственники) существует и у него есть свойство "сдвиг слева", то прибавим к нашей "копилке" значение этого сдвига
 { 
   ofset+= el.offsetLeft; // увеличиваем сдвиг-сумму
   el= el.parentNode; // переходим к родителю
 } 

Вроде бы так...
Правильное значение возвращает?


Это сообщение отредактировал(а) skyboy - 14.8.2006, 14:37
PM MAIL   Вверх
proger
Дата 14.8.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 10.10.2004

Репутация: нет
Всего: 1



skyboy, Возращает ошибку, обьект не поддерживает это свойство или метод!

Добавлено @ 14:55 
skyboy, нет, работает, спасибо!

Добавлено @ 15:01 
skyboy, Немного неверно определ. координаты, уходит сильно в право!
PM MAIL   Вверх
skyboy
Дата 14.8.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



proger, скинь полный код страницы. Ну, по крайней мере, чтоб была таблица и картинка - совсем некогда самому набивать...

Добавлено @ 15:13 
странно. у меня нормально работает. там и правда вычислялось относительно предка... Но "сильно вправо" у меня не уходит...
PM MAIL   Вверх
12345c
Дата 14.8.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Правильно будет работать функция getPosition(), которая та же самая, но не c parentNode , а c offsetParent .

Код
getPosition=function(o){var x=y=0;
    while(o){x+=o.offsetLeft;y+=o.offsetTop;o=o.offsetParent;}
return[x,y]};


Такие же темы:
http://forum.vingrad.ru/index.php?showtopic=90327
http://forum.vingrad.ru/index.php?showtopic=39692
http://forum.vingrad.ru/index.php?showtopic=28220

PM WWW   Вверх
skyboy
Дата 14.8.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



12345c, а почему не определяется через parentNode?
PM MAIL   Вверх
12345c
Дата 14.8.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Он в таблице проходит все ноды - TD, TR,TBODY,TABLE, а надо только TD,TABLE, поэтому считает лишнее. Для списков и прочих тегов должно совпадать.
PM WWW   Вверх
skyboy
Дата 14.8.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



12345c, странно. Ты хочешь сказать, что лишнее смещение(которое у себя не нашёл) появляется от того, что TD смещено относительно TR, TR - относительно TBODY, а  TBODY - относительно TABLE? Странно как-то, ведь если бы между ними реально были бы отступы, они бы и отображались тоже и всё соответствовало бы действительности.... Или я тебя не понял?
PM MAIL   Вверх
Zeroglif
Дата 15.8.2006, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(skyboy @  14.8.2006,  21:00 Найти цитируемый пост)
что лишнее смещение(которое у себя не нашёл) появляется от того

Без кода - гадать про смещение бесполезно. На получение точной позиции может влиять position (relative, absolute), может влиять overflow и проч. 

IE (и Опера, скорее всего тоже) не посчитают размер TD border, в этом случае нужно будет скормить clientLeft/clientTop и т.д. и т.п.

Цитата(12345c @  14.8.2006,  15:19 Найти цитируемый пост)
Правильно будет работать функция getPosition(), которая та же самая, но не c parentNode , а c offsetParent .

getPosition=function(o){var x=y=0;
    while(o){x+=o.offsetLeft;y+=o.offsetTop;o=o.offsetParent;}
return[x,y]};

Ошибка с игреком... (а всё потому, что никак не хочешь красоту навести, отступов да пробелов с переносиками добавить бы...)  smile 
PM MAIL WWW   Вверх
proger
Дата 15.8.2006, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 10.10.2004

Репутация: нет
Всего: 1



Цитата(12345c @  14.8.2006,  15:19 Найти цитируемый пост)
Правильно будет работать функция getPosition(), которая та же самая, но не c parentNode , а c offsetParent .


Разметка HTML
1:
2:
3:

getPosition=function(o){var x=y=0;
    while(o){x+=o.offsetLeft;y+=o.offsetTop;o=o.offsetParent;}
return[x,y]};


ОТЛИЧНО РАБОТАЕТ!
PM MAIL   Вверх
12345c
Дата 15.8.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Цитата(Zeroglif @  15.8.2006,  00:07 Найти цитируемый пост)
Ошибка с игреком
А, точно,

Код
getPosition=function(o){var y;var x=y=0;
    while(o){x+=o.offsetLeft;y+=o.offsetTop;o=o.offsetParent;}
return[x,y]};


Добавлено @ 14:14 
Цитата(skyboy @  14.8.2006,  21:00 Найти цитируемый пост)
что лишнее смещение(которое у себя не нашёл) появляется от того, что TD смещено относительно TR
, они смещены, но ошибка при parentNode оттого, что смещение TR или TBODY излишне плюсуется при этой рекурсии.

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.