Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как определить координаты события относительно элемента в Firefox?  (Прочитано 11880 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Megabotan
Участник

ru
Offline Offline

« : 21-04-2007 15:47 » 

IE поддерживает определение координат события относительно элемента, на котором оно произошло (event.offsetX, event.offsetY).
А вот в Firefox такого нет. Между тем, мне нужно найти способ определить эти координаты в FF.
Я пытался заключить элемент в теги <layer></layer> и определять через переменные event.layerX и event.layerY. Но работает некорректно.
Мне нужно определять координаты курсора в ячейки таблицы, я делал так:
Код:
<TR>
  <layer>
    <TD onmouseover="showCoords(event)">Something</TD>
  </layer>
</TR>

<script language="JavaScript">
function showCoords(event) {
   if (typeof(event)=="undefined") event = window.event;
   obj = (event.srcElement)?event.srcElement:event.target;
   
   offsetX = (typeof(event.offsetX)!="undefined")?event.offsetX:event.layerX;
   offsetY = (typeof(event.offsetY)!="undefined")?event.offsetY:event.layerY;
   alert("x: " + offsetX +"; y: " + offsetY);
                           };
</script>
Но координаты получаются ненормально большими.
Может дело в тегах: layer не может идти после TR? Но тогда как определить координаты в ячейке?
Может кто знает способ как определить относительные координаты?
Только не советуйте, пожалуйста, функции типа:
Код:
function getObjParams(obj){
var preOx = obj.offsetLeft;
var preOy = obj.offsetTop;
while(obj.offsetParent)
{
   // finds the absolute position of the object
   if(obj==document.getElementsByTagName('body')[0]) {break}
   else { obj=obj.offsetParent; };
   preOx += obj.offsetLeft;
   preOy += obj.offsetTop;
};

return {x: preOx, y: preOy, width: ((obj.width)?(obj.width):(obj.offsetWidth)), height: ((obj.height)?(obj.height):(obj.offsetHeight)) };
};
Они иногда дают ошибочный результат.
Записан
Megabotan
Участник

ru
Offline Offline

« Ответ #1 : 21-04-2007 18:59 » 

А я уже сам всё понял.
Нужно, чтобы элемент был свободно позиционирован (position absolute или relative). Тогда и никаких layer'ов не нужно.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 21-04-2007 22:09 » 

Megabotan, с подобной траблой я оже столкнулся год или более назад, но как не рылся в своих архивах ничего найти не смог. Видимо я тоже пришел к такому решению, т.к. использовал именно absolute (не водку Ага ).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Megabotan
Участник

ru
Offline Offline

« Ответ #3 : 21-04-2007 22:18 » 

Но это в том смысле, что если элемент свободно позиционирован, то для него координаты layerX и layerY относительные и не равны pageX и pageY соответственно. Я сколько смотрел в Интернете, обычно пишут, что Firefox не содержит аналогов offsetX. Всё же это не так.
Единственное, что мне не понятно, так это почему нет единого стандарта для всех браузеров на переменные javascript.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 21-04-2007 22:36 » 

Megabotan, стандарт есть, но IE его не поддерживает: W3C DOM и его подразделы, включая HTML DOM и DOM Events. Mozilla (и соотв. FF) наиболее близкий к стандартам среди браузеров, а IE - самый тормозной в развитии.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines