Клавиатурная навигация является критически важным аспектом доступности веб-приложений. В библиотеке Naive UI реализована поддержка фокусировки и навигации с помощью клавиатуры для большинства интерактивных компонентов, что позволяет пользователям перемещаться по интерфейсу без использования мыши.
Ключевым элементом для реализации клавиатурной навигации является
свойство keyboard у компонентов, таких как
n-menu, n-select или n-table. Оно
отвечает за включение или отключение обработки клавиш стрелок, Enter и
Escape для управления элементами интерфейса.
import { NMenu } from 'naive-ui'
<NMenu
:options="menuOptions"
keyboard
/>
В этом примере при фокусе на меню пользователь сможет использовать стрелки для перемещения между пунктами, Enter для выбора и Escape для закрытия вложенных меню.
Naive UI применяет концепцию tabindex и виртуальной
фокусировки. Компоненты автоматически управляют фокусом при открытии
всплывающих элементов, таких как NDropdown или
NDialog. Для кастомных элементов можно использовать
директиву v-focus или tabindex вручную:
<template>
<button tabindex="0">Кнопка с фокусом</button>
</template>
При использовании компонентов, поддерживающих клавиатурное
взаимодействие, не требуется вручную отслеживать фокус,
достаточно включить соответствующее свойство keyboard.
Naive UI поддерживает следующие ключевые действия:
NMenu с подменю.Для компонентов, таких как NInput или
NTextarea, клавиши обрабатываются стандартным образом, а
для сложных элементов типа NTable поддерживается навигация
по строкам и ячейкам с помощью стрелок.
Компонент NTable предоставляет
расширенные возможности клавиатурной навигации. Активная строка или
ячейка подсвечивается, и пользователь может перемещаться между
элементами с помощью стрелок:
<NTable
:columns="columns"
:data="tableData"
row-key="id"
keyboard
/>
Дополнительно, можно использовать слоты body-cell и
body-row для кастомной обработки событий клавиатуры.
Компоненты форм, такие как NSelect,
NRadioGroup и NCheckboxGroup, имеют встроенную
поддержку клавиатурной навигации. В NSelect:
<NSelect
v-model:value="selectedOption"
:options="options"
keyboard
/>
Для групп радиокнопок и чекбоксов стрелки перемещают фокус между элементами, а пробел или Enter – выбирают опцию.
В NDialog и NPopover фокус
автоматически переносится на первый интерактивный элемент при открытии.
Клавиши:
Это реализуется через внутренние обработчики событий клавиатуры, встроенные в компонент, что обеспечивает соблюдение стандартов доступности.
Для сложных сценариев можно использовать событие
on-keydown и метод focus:
<NMenu
:options="menuOptions"
keyboard
@keydown="handleKeydown"
/>
<script>
function handleKeydown(e) {
if (e.key === 'Enter') {
console.log('Элемент выбран')
}
}
</script>
Это позволяет расширить стандартное поведение компонентов без нарушения встроенной логики навигации.
keyboard там, где есть списки или
меню – это автоматически обеспечит базовую доступность.tabindex)
для нестандартных компонентов.Escape и Enter для
закрытия и подтверждения действий.Эти практики гарантируют, что интерфейс будет удобен для пользователей с ограниченной возможностью работы с мышью и соответствовать стандартам доступности.