Intro.js — это библиотека для создания интерактивных пошаговых руководств по интерфейсу. Одним из ключевых аспектов доступности является корректная работа с скринридерами, которые помогают пользователям с нарушениями зрения ориентироваться на странице.
Для обеспечения совместимости со скринридерами Intro.js использует ARIA-атрибуты, которые передают информацию о текущем шаге и навигации. Основные атрибуты:
role="dialog" — указывает, что всплывающее окно
является диалогом, требующим внимания.aria-labelledby — ссылается на заголовок шага, который
скринридер будет озвучивать.aria-describedby — указывает на текстовое описание
шага.aria-hidden="true" — скрывает все элементы страницы,
которые не имеют отношения к текущему шагу, чтобы не отвлекать
пользователя.Intro.js автоматически добавляет эти атрибуты к подсказкам
(.introjs-tooltip) и затемняет фон. Это позволяет
скринридеру сосредоточиться на активной подсказке, а не на всей
странице.
Для пользователей скринридеров критически важно правильное управление фокусом:
Next, Back,
Skip) доступны через клавиатуру, что позволяет перемещаться
без мыши.Tab для
перехода между интерактивными элементами, Enter для
подтверждения действия, Esc для выхода из руководства.Использование метода onafterchange позволяет
разработчику дополнительно управлять фокусом, если необходимо
сосредоточить внимание на конкретном элементе страницы:
introJs().onafterchange(function(targetElement) {
targetElement.focus();
});
Intro.js гарантирует, что текст каждого шага озвучивается корректно:
aria-labelledby.aria-describedby.Для более сложных интерфейсов можно использовать событие
onbeforechange, чтобы обновлять скрытые тексты, которые
будут озвучены скринридером.
Если шаги интерактивные и содержат динамически загружаемый контент, важно учитывать задержку перед озвучиванием:
onchange и
onafterchange, чтобы подождать загрузки элементов.Пример:
introJs().onafterchange(function(targetElement) {
if (!targetElement.offsetHeight) {
setTimeout(() => targetElement.focus(), 100);
}
});
Intro.js тестировался с основными скринридерами:
Особенности работы:
scrollToElement.Intro.js позволяет настраивать ARIA-атрибуты вручную через опции:
introJs().setOptions({
tooltipClass: 'custom-tooltip',
showStepNumbers: false,
exitOnOverlayClick: true
});
Можно добавить собственные атрибуты к подсказкам, чтобы улучшить работу скринридеров:
document.querySelector('.introjs-tooltip').setAttribute('aria-live', 'polite');
aria-live="polite" гарантирует, что скринридер озвучит
обновление без прерывания текущей речи пользователя.
Поддержка скринридеров делает руководства Intro.js доступными для широкой аудитории, включая пользователей с нарушениями зрения, и повышает общую юзабилити интерфейса.