Drakon
Новичок
Firefox: работа с element.style.left
Такая проблема: делаю менюшку, у которой выскакивают подменюшки на DIV-тегах. Ну, короче стандартный вариант.
Так вот: вычисляю, где должна выскачить подменюшка:
Тоже стандартный скрипт.. Везде в инете валяется.
А теперь проблема: перемещаю менюшку в нужное место:
Здесь obj - подменюшка, parent_obj - кнопка, на которую навелю.
Так вот: в IE и Opera всё пашет изумительно.
В Firefox отступ отсчитывается от середины экрана! Потратил хз скока времени.. Чего тока не пробовал - не помогает
Например на www.ag.ru используется почти тот же самый код, но там в Firefox всё гуд... Ничего не понимаю
Для наглядности вот стиль менюшки:
Вот она сама:
Вот тот самый скрипт с www.ag.ru:
-~{}~ 09.11.06 20:14:
Вот пример: http://www.dubki.ru/~drakon/js/DUBKI_CS1.6_SERVER.htm (UTF-8)
-~{}~ 09.11.06 22:20:
Все разрешилось.
Ответ см. здесь: http://forum.vingrad.ru/topic-120353
Такая проблема: делаю менюшку, у которой выскакивают подменюшки на DIV-тегах. Ну, короче стандартный вариант.
Так вот: вычисляю, где должна выскачить подменюшка:
Код:
function findPos(obj)
{
var curleft = curtop = 0;
if (obj.offsetParent)
{
curleft = obj.offsetLeft;
curtop = obj.offsetTop;
while (obj = obj.offsetParent)
{
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
}
}
return [curleft, curtop];
}
А теперь проблема: перемещаю менюшку в нужное место:
Код:
var pos = findPos(parent_obj);
obj.style.left = pos[0] + 'px';
Так вот: в IE и Opera всё пашет изумительно.
В Firefox отступ отсчитывается от середины экрана! Потратил хз скока времени.. Чего тока не пробовал - не помогает

Например на www.ag.ru используется почти тот же самый код, но там в Firefox всё гуд... Ничего не понимаю

Для наглядности вот стиль менюшки:
Код:
DIV.SubMenu
{
position: absolute;
visibility: hidden;
z-index: 10;
top: 0px;
left: 0px;
/* width: 150px; */
filter: alpha(opacity=100);
/* display: none; */
}
TABLE.TopMenu TD
{
background-color: #E3E7E8;
cursor: hand;
font-size: 11px;
letter-spacing: 1px;
filter: alpha(opacity=80);
border: 1px solid #CC0000;
}
TABLE.SubMenu TD
{
background-color: #E3E7E8;
cursor: hand;
font-size: 11px;
letter-spacing: 1px;
filter: alpha(opacity=65);
border: 1px solid #CC0000;
}
Код:
<table cellpadding="2" cellspacing="1" border="0" align="center" class="TopMenu">
<tr>
<td id="menu_1" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Главная</td>
<td id="menu_2" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Ссылки</td>
<td id="menu_3" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Новости</td>
<td id="menu_4" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Статьи</td>
<td id="menu_5" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Файлы</td>
<td id="menu_6" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Правила сервера</td>
<td id="menu_7" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">О сервере</td>
<td id="menu_8" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Сервисы</td>
<td id="menu_9" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Форум</td>
<td id="menu_10" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Статистика CS</td>
</tr>
</table>
<div align="left" class="SubMenu" id="menu_5_sub">
<table cellpadding="2" cellspacing="1" border="0" align="center" class="SubMenu">
<tr><td id="menu_11" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Дистрибутив CS 1.6</td></tr>
<tr><td id="menu_12" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Демки сервера</td></tr>
<tr><td id="menu_13" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Архив карт</td></tr>
<tr><td id="menu_14" onmouseover="m_over(this);"
onmouseout="m_out(this);" onclick="m_click(this);">Архив видео</td></tr>
</table>
</div>
Код:
function popup(ev, pa, ch) {
try {visible.style.visibility = 'hidden';visible.style.display = 'none';}
catch(f) {}
try {
clearTimeout(ti);
queued.style.visibilty = 'hidden';queued.style.display = 'none';
}
catch(f) {}
ch = document.getElementById(ch);
var rr = getDim(pa);
if (isMos != 1) {
ch.style.pixelLeft = rr.x - 1;
ch.style.pixelTop = rr.y + pa.offsetHeight;
}
else {
ch.style.left = rr.x - 1 + 'px';
ch.style.top = (rr.y + pa.offsetHeight) + 'px';
}
ch.style.visibility = 'visible';ch.style.display = 'block';
visible = ch;
}
function getDim(el){
for (var lx=0,ly=0;el!=null;
lx+=el.offsetLeft,ly+=el.offsetTop,el=el.offsetParent);
return {x:lx,y:ly}
}
Вот пример: http://www.dubki.ru/~drakon/js/DUBKI_CS1.6_SERVER.htm (UTF-8)
-~{}~ 09.11.06 22:20:
Все разрешилось.
Ответ см. здесь: http://forum.vingrad.ru/topic-120353