VGNav

Навигационная панель

API, события и оформление

Публичные методы, callbacks, отмена открытия и CSS-переменные.

Примеры используют VGApp и OKAUX 1.0.2. Подключите стили обоих пакетов и выполняйте JavaScript после появления разметки. У VGNav нет автоматического поиска всех меню: для каждого корня нужен один вызов VGNav.init().

Инициализация и параметры

VGNav.init(element, params)
Собирает меню и связывает обработчики. Возвращаемое значение не является экземпляром: получите его через VGNav.getInstance(element). Инициализируйте корень один раз.
.vg-nav → .vg-nav-wrapper
В этих примерах wrapper — сам ul, его прямые дети — li. Пункт с подменю: li.dropdown, ссылка a, затем .dropdown-content.
Data API
После init клики обрабатываются делегированно. data-hover="false", data-breakpoint="false", data-hamburger-enable="false" читаются с корня. Для camelCase используйте JavaScript либо JSON data-params с точными ключами: dropListScroll, horizontalOnly.
hover / placement
true / horizontal по умолчанию. hover: false включает клики; placement: vertical меняет направление списка. На мобильных устройствах наведение заменяется кликом.
hoversmoothfirstlevel
enable: false, horizontalOnly: true. Плавное переключение работает между соседними dropdown первого уровня.
dropListScroll / toggle
true включает прокрутку .vg-nav-drop-list; toggle задаёт доверенную HTML-разметку индикатора. Не передавайте непроверенный пользовательский HTML.
overflow
Работает только для первого уровня placement: horizontal. enable включает перенос по ширине; count задаёт максимум видимых исходных пунктов, а 0 отключает ограничение количества. keep исключает элементы из переноса. По умолчанию это .dropdown-mega и [data-vg-nav-overflow="keep"].
overflow.trigger
По умолчанию используется встроенная SVG-иконка dots и ariaLabel «Другие разделы». icon выбирает системную иконку, label добавляет текст, body принимает доверенную HTML-разметку.
hamburger
enable: true, always: false, title: '', body: null, target: '#sidebar-nav'. title и body вставляются как HTML — используйте только доверенные строки.
Анимация
Видимый переход задаёт --vg-nav-drop-transition. Не используйте animation.timeout как регулятор CSS-длительности: текущие show/hide используют собственное ожидание перехода.

Методы и события

instance.show({ relatedTarget: li })
Открывает конкретный .dropdown; не выполняет автоматическое закрытие соседних пунктов.
instance.hide({ relatedTarget: li })
Закрывает пункт вместе с вложенными подменю.
instance.refresh()
Повторно измеряет горизонтальное меню. Размер контейнера отслеживается автоматически; метод нужен после программного изменения текста или состава пунктов.
callbacks.afterInit(instance)
Вызывается после сборки структуры.
callbacks.afterClick(instance, event, link)
Вызывается для кликов по ссылкам с aria-expanded.
vg.nav.show / vg.nav.hide
События на li.dropdown до изменения состояния. event.preventDefault() отменяет действие.
vg.nav.shown / vg.nav.hidden
shown — на li.dropdown, hidden — на .dropdown-content после перехода. События всплывают: журнал можно подключить к корню.
Закрытие снаружи
Клик вне меню или уход фокуса наружу через Tab закрывает dropdown. Управление стрелками и Escape для самого VGNav не реализовано; Escape в адаптивном примере обрабатывает VGSidebar.

CSS-переменные и тема

Тема общая для сайта: OKAUX меняет data-theme, а публичный адаптер vgapp/theme подключает переменные VGApp к тому же селектору.

Пункты
--vg-nav-item-padding, --vg-nav-item-color, --vg-nav-item-font-size, --vg-nav-item-font-weight, --vg-nav-item-border-radius, --vg-nav-item-white-space.
Dropdown
--vg-nav-drop-width, --vg-nav-drop-bg, --vg-nav-drop-border-color, --vg-nav-drop-border-radius, --vg-nav-drop-transition, --vg-nav-drop-z-index.
Список
--vg-nav-drop-max-height, --vg-nav-drop-overflow-y, --vg-nav-drop-overflow-x; --vg-nav-drop-item-padding, --vg-nav-drop-item-bg-hover, --vg-nav-drop-item-color-hover.
Мегаменю
--vg-nav-drop-mega-width, --vg-nav-drop-mega-min-height, --vg-nav-drop-mega-padding, --vg-nav-drop-mega-bg, --vg-nav-drop-mega-border-color.
Гамбургер
--vg-nav-hamburger-height, --vg-nav-hamburger-line-width, --vg-nav-hamburger-line-color, --vg-nav-hamburger-line-height, --vg-nav-hamburger-line-indent-top.