![]() |
РЕКЛАМА |
Иерархическое (многоуровневое)
< Часть 5
|
Реклама
|
|
Напомним что, функция ConstructMenu так генерирует html-код, что id=submenu имеют тэги SPAN полосы меню и DIV всех подменю. Все остальные пункты подменю (заключенные в тэги SPAN), включая ссылки (указатели) на подменю высшего уровня, имеют id=menupunkt. Эти пункты меню включаются в тэги DIV подменю, так что DIV является контейнером (и владельцем) этих пунктов. События от мыши для этих тэгов созникают согласно принципа всплытия пузырька (event bubbling): сначала событие направляется элементу (тэгу), содержащемуся непосредственно под курсором мышки (самому верхнему), затем элементу, содержащему верхний элемент и т.д. Последними получают событие объекты браузера document и window. (Следует заметить, что этот механизм справедлив лишь для браузера MS Internet Explorer; для других браузеров он может отличаться.) Таким образом, в нашем случае, первым событие получает пункт меню (SPAN), а затем подменю (DIV). При получении события пунктом меню он активизируется. Далее событие получает подменю. Если активный пункт меню является указателем на подменю высшего уровня, то отображается это подменю.
Код обработчика события может получить полезную информацию из свойства event объекта window браузера. В частности свойства объекта event type, srcElement, toElement указывают на тип (строковое представление рода события, например, "mouseover"), элемент активный во время события (элемент-источник) и активизирующийся элемент (для событий перемещения мыши). (Есть и другие свойства event, но мы их рассматривать не будем.) Код обработчика событий для подменю (id=submenu) довольно прост. Если мышь покинула элемент (событие mouseout) и не определен активизирующийся элемент, то все подменю прячутся. Если мышь перешла на элемент (событие mouseover), то в главном меню menu ищется подменю с именем равным имени элемента-источника. Если оно найдено, то его отображают (функция ViewSubMenu); в противном случае ничего не делают. Код обработчика событий для пунктов меню (id=menupunkt) немного более сложен. На событие mouseout (деактивизация) имени класса пункта меню присваивается имя определенного в файле стилей класса "nonact" и восстанавливается строка статуса. При событии mouseover (активизация) класс пункта меню меняется на "active", прячутся все подменю высшего, чем подменю данного пункта, уровня (функция HideSubMenu), ищется в главном меню объект MenuItem с именем, равным имени элемента-источника. URL (поле а) найденного объекта записывается в строку статуса. На событие click (пункт меню выбран) ищется в главном меню объект MenuItem с именем, равным имени элемента-источника. Если найденный элемент ссылка (или JavaScript), а не указатель на подменю высшего уровня, то выполняется переход по URL пукта меню (поле а объекта MenuItem). Для этого в свойство location объекта браузера document записывается данный URL. Если вместо ссылки приведен JavaScript-код (дает положительный результат поиск строк "javascript" или "jscript"), то выполняется команда (функция JavaScript eval). Если пункт меню указатель на подменю высшего уровня, то событие click игнорируется. За отображение подменю отвечает функция ViewSubMenu (mb), где mb объект подменю. Позиционирование (т.е. расположение в окне браузера) подменю различается для подменю нулевого уровня и подменю других уровней. Подменю нулевого уровня находится под пунктом полосы главного меню, в то время как другие подменю слева от пункта-указателя на это подменю. Таким образом, для отображения подменю
Описание остальных функций файла handles.js тривиально и приведено в Листинге 3. [> далее >] © 2000, Сергей Кузнецов
|
Реклама
ВАКАНСИИ (Компьютеры, Интернет). |
| Главная / Разное / JavaScript-меню | ^^^ | ||
| © iD, 2000
|