На веб-странице необходимо организовать многоуровневое меню, раскрывающееся при наведении указателя мыши.

Опубликовал: Wednesday, July 17, 2024 в категории jQuery, Подборка рецептов | Пока нет комментариев

При этом все пункты меню должны быть доступными для индексации роботами поисковых систем. И конечно, страница должна соответствовать стандартам W3C.

Решение

Для решения этой задачи используем плагин Superfish, разработанный для библиотеки jQuery (листинг 11.1.1).

Листинг 1 1 .1 .1 . Использование плагина jQuery Superfish

Обсуждение

Рассмотрим пример, приведенный в листинге 11.1.1, и прежде всего разберемся, какие файлы необходимо указать в разделе head веб-страницы. Сначала подключен css/superfish.css — файл стилевого оформления меню, затем файл библиотеки jQuery js/jquery-1.5.2.min.js, а также файл плагина js/superfish.js.

Файл js/hoverIntent.js подключать необязательно, но если он указан, плагин Superfish определит его присутствие и будет использовать его возможности.

ПРИМЕЧАНИЕ

hoverIntent — плагин, который несколько замедляет вызов событий при наведении указателя мыши на элемент или выходе за его пределы, чтобы предотвратить случайный вызов каких-либо функций.

Теперь обратим свое внимание на HTML-разметку. По ней несложно понять, что многоуровневое меню состоит из вложенных друг в друга ненумерованных списков.

Все, что осталось проделать, — написать буквально одну строку JavaScript-кода: выбрать корневой элемент ul нашего меню по значению sf-menu его атрибута class и связать с ним метод superfish().

Полученный результат можно увидеть на рис. 11.1.

Продолжим знакомство с плагином Superfish и попробуем передать ему некоторые пользовательские настройки, которые он умеет принимать.

Листинг 1 1 .1 .2 . Использование плагина jQuery Superfish

В листинге 11.1.2 мы опустили практически всю HTML-разметку, поскольку она не изменилась. И подключаемые файлы остались прежними. Изменения коснулись только JavaScript-кода.

Рис. 11.1. Меню Superfish — горизонтальное расположение

Посмотрите, теперь мы не только выбрали необходимый элемент ul и связали с ним метод superfish(), но и передали ему в качестве аргумента объект с некоторыми настройками.

В свойстве animation передаем объект с настройками для анимации, выполняемой при открытии уровней меню. Это свойство может принимать объект с любыми настройками, которые "понимает" метод animate() самой библиотеки jQuery.

В свойстве delay передаем задержку 1,2 с, т. е. вложенные уровни меню будут закрываться с этой задержкой.

Для свойства onShow в качестве значения выступает пользовательская функция, которая вызывается сразу после того, как открыт очередной уровень меню (т. е. сразу по завершении анимации, если она используется). Внутри функции объект $(this) представляет тот элемент ul, пункты списка li которого были открыты. Если вы испытаете пример, находящийся на прилагаемом к книге компакт-диске, то сможете убедиться, что в окне предупреждения действительно выводится значение атрибута class этого элемента.

Остальные опции используются аналогично, а полный их список с описаниями приведен в табл. 11.1.

Таблица 11.1. Опции плагина Superfish

Опция

Описание

hoverClass

Имя класса, который применяется к пункту меню, когда над ним находится указатель мыши. Значение по умолчанию — sfHover

pathClass

Имя класса, который применяется к пункту списка, указывающему на текущую страницу

delay

Задержка закрытия меню после выхода указателя мыши за его пределы. Значение по умолчанию — 800 мс

animation

Принимает объект с настройками. Идентичен объекту, который может быть передан первым аргументом методу animate() библиотеки jQuery. Значение по умолчанию — {opacity:’show’}

speed

Время выполнения анимации. Указывается аналогично второму аргументу метода animate() библиотеки jQuery. Значение по умолчанию — ‘normal’

autoArrows

Значение по умолчанию — true. Стрелки автоматически генерируются в разметке

dropShadows

Значение по умолчанию — true. Чтобы группы пунктов подменю не отбрасывали тень, необходимо установить значение false

disableHI

Значение по умолчанию — false. Установка значения true приведет к тому, что плагин hoverIntent.js (если подключен) не будет обнаруживаться и его возможности не будут использоваться

onInit

В этой опции может быть определена пользовательская функция, которая будет вызвана при инициализации меню

onBeforeShow

В этой опции может быть определена пользовательская функция, которая будет вызвана непосредственно перед открытием очередного уровня меню

Таблица 11.1 (окончание)

Опция

Описание

onShow

В этой опции может быть определена пользовательская функция, которая будет вызвана сразу после открытия очередного уровня подменю (после завершения анимации, если используется)

onHide

В этой опции может быть определена пользовательская функция, которая будет вызвана сразу после закрытия очередного уровня подменю (после завершения анимации, если используется)

До сих пор мы рассматривали возможности плагина на примере горизонтального меню. А если нам понадобится меню вертикальное?

Оставим для примера ту же самую HTML-разметку и посмотрим, как этот вопрос можно решить с помощью плагина Superfish (листинг 11.1.3).

Листинг 1 1 .1 .3 . Использование плагина jQuery Superfish

В примере из листинга 11.1.3 мы подключили дополнительный стилевой файл css/superfish-vertical.css — он отвечает за вертикальную ориентацию меню. В HTML-разметке изменения минимальны — корневому элементу ul нашего меню

добавлен дополнительный класс sf-vertical. А в JavaScript-коде вообще никаких изменений не потребовалось!

На рис. 11.2 показано, как будет выглядеть развернутое многоуровневое меню при вертикальном расположении.

Рис. 11.2. Результат использования плагина jQuery Superfish

И наконец, познакомимся с еще одной возможностью плагина — попробуем организовать меню в виде навигационной панели. При этом опять HTML-разметка останется практически без изменений (листинг 11.1.4).

Листинг 1 1 .1 .4 . Использование плагина jQuery Superfish

Из примера, приведенного в листинге 11.1.4, ясно, что для создания меню в виде навигационной панели потребовалось только подключить стилевой файл css/superfish-navbar.css и добавить имя класса sf-navbar корневому элементу ul меню. В JavaScript-коде вновь никаких изменений.

Результат можно увидеть на рис. 11.3.

Рис. 11.3. Результат использования плагина jQuery Superfish

Найти оригинальное описание плагина Superfish в Интернете можно по адресу

http://users.tpg.com.au/j_birch/plugins/superfish/.

Источник: Самков Г. А. jQuery. Сборник рецептов. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. — 416 с.: ил. + CD-ROM — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *