Фокус-менеджмент является ключевым аспектом при создании доступных интерфейсов в приложениях на Vue.js с использованием библиотеки Element Plus. Он позволяет контролировать, какой элемент интерфейса активен, управлять навигацией с клавиатуры и обеспечивать корректное поведение модальных окон, выпадающих списков и других интерактивных компонентов.
Большинство компонентов Element Plus имеют встроенную поддержку фокуса и предоставляют пропсы для его настройки.
autofocusМногие интерактивные компоненты, такие как
<el-input>, <el-button> или
<el-select>, поддерживают пропс
autofocus. Он позволяет автоматически ставить фокус на
компонент при рендере.
<el-input v-model="username" placeholder="Введите имя" autofocus></el-input>
Особенности использования:
nextTick в
Vue).import { nextTick } from 'vue';
nextTick(() => {
usernameInput.focus();
});
Все компоненты Element Plus поддерживают стандартные DOM-методы,
такие как .focus() и .blur(). Например:
<el-input ref="emailInput" v-model="email" placeholder="Email"></el-input>
<script setup>
import { ref, onMounted } from 'vue';
const emailInput = ref(null);
onMounted(() => {
emailInput.value.focus();
});
</script>
Компоненты <el-dialog> и
<el-drawer> автоматически перехватывают фокус, когда
открыты. Это обеспечивает правильное поведение клавиатурной навигации и
предотвращает уход фокуса за пределы модального окна.
Ключевые моменты:
modal блокирует взаимодействие с остальной
страницей.<el-dialog :visible.sync="dialogVisible" title="Форма">
<el-input v-model="formData.name" placeholder="Имя"></el-input>
</el-dialog>
tabindex)Для сложных интерфейсов важно управлять последовательностью
фокусировки. Все компоненты Element Plus поддерживают стандартный
HTML-атрибут tabindex.
<el-button tabindex="1">Первый</el-button>
<el-input tabindex="2" placeholder="Второй"></el-input>
<el-select tabindex="3" placeholder="Третий"></el-select>
Рекомендации:
tabindex для
стандартных интерактивных элементов без необходимости.tabindex="0" на
контейнере для поддержки клавиатурного фокуса.Element Plus предоставляет события, связанные с фокусом:
focus – срабатывает при получении фокуса.blur – срабатывает при потере фокуса.keydown и keyup – позволяют реализовать
кастомные сценарии навигации.Пример использования:
<el-input
v-model="search"
placeholder="Поиск"
@focus="onFocus"
@blur="onBlur"
@keydown.enter="submitSearch">
</el-input>
<script setup>
const onFo cus = () => console.log('Фокус на поле поиска');
const onB lur = () => console.log('Фокус ушел');
const submitSearch = () => console.log('Отправка поиска');
</script>
<el-select> и <el-dropdown>Компоненты, содержащие выпадающие списки, имеют свои особенности:
el-select
filterable позволяет фокусироваться на поле ввода
для фильтрации опций.<el-select v-model="value" filterable placeholder="Выберите опцию">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
el-dropdown
@command
и стрелок.trigger="hover" сохраняет возможность фокусировки
через клавиатуру при наведении.С помощью Composition API можно создавать более гибкое управление фокусом для сложных сценариев:
import { ref, onMounted } from 'vue';
const activeInput = ref(null);
const setFocus = () => {
if (activeInput.value) activeInput.value.focus();
};
onMounted(() => {
setFocus();
});
Преимущества:
Правильное управление фокусом напрямую связано с доступностью интерфейса:
aria-* вместе с управлением
фокусом улучшает совместимость с экранными читалками.Пример для диалога:
<el-dialog
:visible.sync="dialogVisible"
title="Доступный диалог"
aria-modal="true"
role="dialog">
<el-input placeholder="Введите текст"></el-input>
</el-dialog>
Фокус-менеджмент в Element Plus обеспечивает безопасное, доступное и предсказуемое взаимодействие с интерфейсом. Комбинация встроенных пропсов, событий и возможностей Composition API позволяет детально контролировать поведение фокуса в любых сценариях: модальные окна, формы, выпадающие списки и кастомные компоненты.