Многоуровневые анимационные меню

Полный список свойств и функций, а так же общие правила их использования, см. здесь: Краткий обзор и правила, список функций VcorpJS.

Меню должно быть описано в HTML как структура тегов <menu> и <li>, в CSS как соответствующие стили и классы (см. Типовой CSS-файл VcorpJS)

Анимационные меню работают по клику, поэтому хорошо поддерживаются на устройствах с сенсорным экраном.
Плагин меню НЕ использует основную функцию анимации, у него собственная независимая анимация.

Может работать сколько угодно независимых меню на одной web-странице. каждое меню может содержать до 50 уровней вложенности.

Любое меню легко создаётся в виде HTML-кода с последующей инициализацией функцией .iMenu(), любое меню совершенно корректно удаляется обыкновенной очисткой через .innerHTML или удалением объекта, при этом все ссылки на обработчики и параметры для удаляемого меню удаляются вместе с меню, так как являются его частью (находятся в свойствах HTML-объектов меню).

Браузеры IE любых версий (даже новые), в случае инициализации невидимого меню (например, в скрытом объекте-родителе), могут некорректно провести инициализацию, поэтому нужно следить, чтобы во время вызова функции .iMenu() блок с меню участвовал в рендеринге веб-страницы (display:block и т.д.).

Для возможности использования различных изображений или спрайтов (и других стилей) в тегах <li>, в них вставлены блоки <div>, для которых в качестве примера сделаны 5 различных классов для изображений пунктов и разделов меню .pb_m1 ... .pb_m5 (см. Типовой CSS-файл VcorpJS).
Можно при желании раскрасить тексты как у плагина checkbox или реализовать другие визуальные эффекты.

.sMenu( [ time ] , [ step ] , [ handler ] )

Установка общих парамтров для всех меню на веб-странице.

time - скорость анимации одной операции меню (время в миллисекундах), не менее 100 ( по умолчанию 140 ).

step - скорость анимации для меню (шаг в миллисекундах), не менее 10 ( по умолчанию 20 ).

handler - общая callbak - функция, вызываемая при каждом клике по любому пункту любого меню,
если у меню не указана своя функция. Формат вызова: function( e ); где:

  • this - ссылка на пункт меню ( HTML-элемент <li> )
  • e - объект event события click

handler может быть текстовой строкой кода (см. правила для callbak - функций).

Функция ничего не возвращает.

VcorpJS.sMenu( 200, 20, myFuncDefault );

.iMenu( node , [ autoCloseItem ] , [ noWrapText ] , [ handler ] )

Инициализирует указанное меню node, меню начинает работать и анимироваться.

node - это ссылка на объект (корневой тег <menu>) или его текстовый id

autoCloseItem - если параметр указан, то авто-сворачивание раскрытых разделов (кроме текущего, пока он не будет "кликаться").

noWrapText - если параметр указан, то обрезка не умещающегося текста в пунктах меню <li>, иначе перенос.
Этот параметр действует только на текст конечных пунктов меню, текст разделов всегда обрезается (если раздел закрыт) и переносится (если раздел раскрыт).
Можно поиграться так же стилями CSS white-space и text-overflow тега <li> и вложенных в него...

handler - это callbak-функция для текущего меню, вызываемая при каждом клике по любому пункту любого меню.
Формат вызова: function( e ); где:

  • this - ссылка на пункт меню ( HTML-элемент <li> )
  • e - объект event события click

handler может быть текстовой строкой кода (см. правила для callback - функций).

Функция возвращает true, или false если не найден объект меню node или хотя-бы один пункт-тег <li>.

VcorpJS.iMenu( "id_mainMenu", 0, 0, myFunc );

.gMenu( node )

Возвращает сылку на активный пункт (объект <li>) меню node (или undefined).

alert( VcorpJS.gMenu("id_mainMenu") );

Пример HTML-меню и несколько визуальных вариантов его работы

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

Стили для всех элементов тестовых меню совпадают со стилями навигационного меню раздела сайта «VcorpJS», но в тексте нет ссылок.

<!--
Пример исходного HTML-кода меню.
Раздел 2 открыт (указан CSS-класс "pb_mo").
-->

<menu id="testMenu">
  <li><div class="pb_m3"></div><span>Первый пункт</span></li>
  <li><div class="pb_m3"></div><span>Второй пункт</span></li>
  <li class="pb_mc"><div class="pb_m2"></div><span>Раздел 1</span>
    <menu>
      <li><div class="pb_m3"></div><span>Первый</span></li>
      <li><div class="pb_m3"></div><span>Второй</span></li>
      <li><div class="pb_m3"></div><span>Третий</span></li>
    </menu>
  </li>
  <li class="pb_mo"><div class="pb_m2"></div><span>Раздел 2</span>
    <menu>
      <li><div class="pb_m3"></div><span>Первый</span></li>
      <li><div class="pb_m3"></div><span>Второй</span></li>
    </menu>
  </li>
  <li class="pb_mc"><div class="pb_m2"></div><span>Раздел 3</span>
    <menu>
      <li><div class="pb_m3"></div><span>Первый</span></li>
    </menu>
  </li>
  <li><div class="pb_m3"></div><span>Последний пункт</span></li>
</menu>

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

Типовое оформление CSS-классов и стилей меню

Обязательно должен быть указан (явно или неявно)
и доступен для чтения стиль line-height
(для тега <li>), по высоте строк
рассчитываются некоторые параметры.

Вариант 1 - инициализация по-умолчанию.

/*
  Инициализация меню
  по-умолчанию
  (все разделы
  можно раскрыть).
*/

VcorpJS.iMenu( "testMenu" );

  • Первый пункт
  • Второй пункт
  • Раздел 1
  • Первый
  • Второй
  • Третий
  • Раздел 2
  • Первый
  • Второй
  • Раздел 3
  • Первый
  • Последний пункт
  • Вариант 2 - инициализация меню с авто-сворачиванием разделов.

    /*
      Инициализация меню
      с авто-сворачиванием
      раскрытых разделов
      (кроме текущего, пока
      он не будет "кликаться").
    */

    VcorpJS.iMenu( "testMenu", 1 );

  • Первый пункт
  • Второй пункт
  • Раздел 1
  • Первый
  • Второй
  • Третий
  • Раздел 2
  • Первый
  • Второй
  • Раздел 3
  • Первый
  • Последний пункт
  • Вариант 3 - инициализация меню с переносом строк (по умолчанию).

    Кроме заголовоков разделов!

    /*
      Инициализация меню
      с переносом строк
      (по-умолчанию)
    */

    VcorpJS.iMenu( "testMenu" );

  • Первый пункт
  • Второй пункт
  • Раздел 1 длинное название длинное название длинное название длинное название
  • Первый длинное название Первый длинное название Первый длинное название Первый длинное название Первый длинное название
  • Второй длинное название Второй длинное название Второй длинное название Второй длинное название
  • Третий длинное название
  • Раздел 2
  • Первый
  • Второй
  • Раздел 3
  • Первый
  • Последний пункт
  • Вариант 4 - инициализация меню с обрезкой строк.

    Кроме заголовоков разделов!

    /*
      Инициализация меню
      с обрезкой строк
    */

    VcorpJS.iMenu("testMenu", 0, 1);

  • Первый пункт
  • Второй пункт
  • Раздел 1 длинное название длинное название длинное название длинное название
  • Первый длинное название Первый длинное название Первый длинное название Первый длинное название Первый длинное название
  • Второй длинное название Второй длинное название Второй длинное название Второй длинное название
  • Третий длинное название
  • Раздел 2
  • Первый
  • Второй
  • Раздел 3
  • Первый
  • Последний пункт
  • Для навигации по всем страницам этого раздела сайта используйте пиктограмму или ссылку Навигация в верхней строке навигации.

  • «VcorpJS» - Главная страница раздела
  • Основные сведения
  • Подключение и инициализация VcorpJS
  • Типовой CSS-файл
  • Краткий обзор и правила, список всех функций.
  • Работа с функциями различного назначения
  • Функции общего назначения
  • Работа с классами и стилями
  • Работа с coockie
  • Работа со слоями (layers)
  • Управление событиями, спец-объект и обработчики
  • Работа со встроенными плагинами
  • Плагины VcorpJS - краткий обзор и правила
  • Перетаскивание объектов
  • Многоуровневые анимационные меню
  • Галереи изображений
  • Блоки ротации изображений
  • Модальное диалоговое окно
  • Модальное окно сообщения
  • Переключатели-флажки checkbox
  • Форматированный ввод данных
  • Поля ввода со списком выбора - combobox
  • Календарь (datepicker)
  • Оконная система
  • Оконная система - краткий обзор и правила
  • Настройка окон и оконная callback-функция
  • Функции работы с окнами
  • Работа с панелью окон
  • Табличный вывод данных Grid
  • Grid - краткий обзор и правила
  • Функции работы с Grid
  • Анимация объектов
  • Краткий обзор и правила анимации
  • Базовая функция анимации
  • Функции - обёртки анимации
  • POST запросы VcorpJS
  • POST запросы VcorpJS
  • Canvas и SVG - графика
  • Canvas - краткий обзор и правила
  • SVG - графики (charts)
  • Скачать vcorp_js_00_80.zip (35 Kb - js и css файлы)
  •  
  • Vcorp.ru - Главная страница сайта
  • Тест больших гридов в перемещаемых окнах
  • Тестирование 3D графики в браузерах
  • «Vcorp Generator» - Главная страница раздела
  • «Lazarus fpCEF3» - Главная страница раздела
  • Открывать окно навигации
    <<<
    Изменить высоту >>