Помогите разобраться со слоями!> К сожалению, менюшка не совсем заработала. Самое удивительное, что она корректно работает в NN6, на что я уже и не надеялась, а в IE работает не правильно.
Ну, Это-То Как-Раз Ожидаемо. Работа С DOM И CSS В Gecko (Это Движок Новых Netscape'ов) Сейчас Лучшая Из Всех Браузеров.
> Когда с пункта убирается мышка скрывается только первая строчка слоя,а не весь слой.
Это В Каком IE? У Меня В 6-м Работает Все Хорошо. Судя По Коду, Должно Работать И В 4-м.
> Какая-то загадка! Вот текст измененного меню.
Вообще, Загадок Там Действительно Много. Код, Если Честно, Очень Перегружен. И Если Его "Пообшибать" Немного, То Разбираться Будет Сильно Легче. Вот, Например, Функция fnShowMenu:
function fnShowMenu(oMenuLink, oMenuDiv){ .window.clearTimeout(g_iFadeTimer); .HideMenu(); .if (dom) . { . document.getElementById(oMenuDiv).style.width = document.getElementById(oMenuLink).offsetWidth; . document.getElementById(oMenuDiv).style.filter = "alpha(opacity=100)"; . document.getElementById(oMenuDiv).style.left = document.getElementById(oMenuLink).offsetLeft; . document.getElementById(oMenuDiv).style.visibility = "visible"; . } else if (ie4) . { . document.all[oMenuDiv].style.width = document.all[oMenuLink].offsetWidth; . document.all[oMenuDiv].style.filter = "alpha(opacity=100)"; . document.all[oMenuDiv].style.left = document.all[oMenuLink].offsetLeft; . document.all[oMenuDiv].style.visibility = "visible"; } .last_elem = oMenuDiv; }
Нет Совершенно Никакой Необходимости Вызывать document.getElementById Каждый Раз. Во-Первых, Это Выглядит Очень Громоздко, А Во-Вторых Работает Медленно. Нужно В Самом Начале Присвоить Ссылки На Элементы Переменным, А Дальше Ими Пользоваться. Больше Того, Если Посмотреть На Часть, Которая Для IE4, То Различается Она Только Тем, Что Вместо document.getElementById Используется document.all. Остально Абсолютно Одинаково. А Значит, Если Выполнить Поиск Элемента Один Раз И Присвоить Его Переменной, То Дальше Вместо Двух Одинаковых Кусков Можно Использовать Один:
function fnShowMenu(oMenuLink, oMenuDiv){ window.clearTimeout(g_iFadeTimer); HideMenu(); var Link=dom?document.getElementById(oMenuLink):document.all[oMenuLink]; var Div=dom?document.getElementById(oMenuDiv):document.all[oMenuDiv];
Div.style.width = Link.offsetWidth; Div.style.filter = "alpha(opacity=100)"; Div.style.left = Link.offsetLeft; Div.style.visibility = "visible";
last_elem=oMenuDiv; }
Так Гораздо Проще. То Же Самое Неплохо Бы Сделать И С Остальными Функциями.
Это Самое Первое И Легкое, Что Можно Сделать, Чтобы Улучшить Код. Далее Можно Отказаться От: 1. Таймеров. 2. Альфа-Канала. Видимо, Раньше С Его Помощью Делался Эффект Появления Меню, А Сейчас Он Просто Ничего Не Делает. 3. Поиска По ID'шкам. Так Как Меню Работает По Наведению Мышки, Можно Получать Ссылку На Элемент Прямо Из Мышиного События.
Затем Можно Будет Сделать Грамотные Откаты Для Браузеров, Которые Не Поддерживают Ни DOM, Ни Модель 4-го IE.
Но Не Все Сразу... |