Библиотека Toastify в JavaScript позволяет создавать настраиваемые уведомления (toasts) с минимальными усилиями, но её возможности управления взаимодействием с клавиатурой часто остаются недооценёнными. Toastify поддерживает как базовое отображение уведомлений, так и их управление с помощью клавиш, что критически важно для доступности и удобства пользовательского интерфейса.
Для начала необходимо создать уведомление с помощью метода
Toastify({ ...options }). Ключевые параметры:
Toastify({
text: "Сообщение",
duration: 3000,
close: true, // добавляет кнопку закрытия
gravity: "top", // расположение сверху или снизу
position: "right", // позиция по горизонтали
}).showToast();
text — текст уведомления.duration — время показа в
миллисекундах; если 0, уведомление остаётся до явного закрытия.close — добавляет кнопку закрытия. Это
важно, так как клавиатурная навигация часто опирается на фокусируемые
элементы, а кнопка закрытия становится доступной для клавиатуры.Чтобы уведомления были полностью управляемы с клавиатуры, элемент
toast должен быть фокусируемым. Toastify создаёт контейнер
div.toastify, к которому можно программно добавить атрибут
tabindex:
const toast = Toastify({
text: "Нажмите Enter для действия",
close: true,
duration: 0
}).showToast();
toast.toastElement.setAttribute("tabindex", "0");
После этого уведомление может принимать фокус при навигации с
клавиатуры с помощью клавиш Tab и
Shift+Tab.
Toastify позволяет привязывать обработчики событий к элементу
уведомления. Для навигации с клавиатуры важно использовать события
keydown:
toast.toastElement.addEventListener("keydown", function(event) {
if (event.key === "Enter") {
console.log("Enter нажата — выполнить действие");
toast.hideToast();
}
if (event.key === "Escape") {
toast.hideToast();
}
});
Enter — часто используется для
подтверждения действия или перехода по ссылке внутри toast.Escape — стандартная клавиша для
закрытия уведомления.Если на странице отображается несколько toast, навигация между ними
требует явного управления фокусом. Например, можно создать массив
элементов уведомлений и обрабатывать ArrowUp /
ArrowDown:
const toasts = document.querySelectorAll(".toastify");
toasts.forEach((toast, index) => {
toast.addEventListener("keydown", (event) => {
if (event.key === "ArrowDown") {
const nextIndex = (index + 1) % toasts.length;
toasts[nextIndex].focus();
}
if (event.key === "ArrowUp") {
const prevIndex = (index - 1 + toasts.length) % toasts.length;
toasts[prevIndex].focus();
}
});
});
Такой подход обеспечивает циклическую навигацию, что особенно полезно при множественных уведомлениях на экране.
Если используется кнопка закрытия, она должна быть фокусируемой
(tabindex="0") и реагировать на Enter или
Space:
const closeButton = toast.toastElement.querySelector(".toast-close");
closeButton.setAttribute("tabindex", "0");
closeButton.addEventListener("keydown", (event) => {
if (event.key === "Enter" || event.key === " ") {
toast.hideToast();
}
});
Это обеспечивает полную совместимость с клавиатурной навигацией и улучшает доступность.
Для удобства визуальной навигации важно выделять активный toast с помощью CSS:
.toastify:focus {
outline: 2px solid #007acc;
outline-offset: 2px;
}
.toast-close:focus {
outline: 2px solid #ff0000;
}
Такое оформление помогает пользователю сразу видеть, какой элемент активен при навигации с клавиатуры.
Toastify позволяет добавлять кастомные действия на toast. Для клавиатуры это особенно удобно:
toast.toastElement.addEventListener("keydown", (event) => {
if (event.key === "Enter") {
performCustomAction();
toast.hideToast();
}
});
Функция performCustomAction() может выполнять любые
задачи: от открытия модального окна до перенаправления пользователя.
tabindex="0" для toast и кнопки
закрытия.keydown для клавиш Enter,
Escape, ArrowUp, ArrowDown.Enter или
Space.Эти шаги позволяют сделать уведомления Toastify полностью управляемыми с клавиатуры, повышая удобство и доступность веб-приложения.