Intro.js — библиотека для создания интерактивных пошаговых инструкций на веб-страницах. Для обеспечения доступности и корректного взаимодействия с пользователями, использующими вспомогательные технологии, критически важно правильно использовать ARIA-атрибуты. ARIA (Accessible Rich Internet Applications) позволяет элементам интерфейса быть понятными для экранных читалок и других ассистивных средств.
Intro.js автоматически добавляет некоторые атрибуты к элементам, которые участвуют в шаге. Основные из них:
aria-hidden=“true” Скрывает от экранных читалок все элементы страницы, кроме текущего шага. Это предотвращает отвлечение пользователя и фокусирует внимание на активном контенте.
aria-describedby Ссылается на контейнер, содержащий текст шага. Экранная читалка озвучивает описание шага, обеспечивая доступность информации.
role=“dialog” Используется для обертки шага, сигнализируя ассистивным технологиям, что это модальный диалог. Элемент с role=“dialog” воспринимается как отдельное окно с фокусом на текущем контенте.
aria-live=“polite” Устанавливается для текста шага, чтобы обновления озвучивались экранными читалками без резкого прерывания текущего потока речи.
Intro.js предоставляет возможность тонкой настройки доступности через параметры:
introJs().setOptions({
steps: [
{
element: '#button1',
intro: 'Нажмите эту кнопку для начала процесса',
tooltipClass: 'customTooltip'
},
{
element: '#formField',
intro: 'Введите данные в это поле',
position: 'right'
}
],
hidePrev: true,
hideNext: false,
disableInteraction: false,
showStepNumbers: false
});
true элементы
интерфейса недоступны для кликов, что предотвращает случайные действия и
сохраняет фокус на текущем шаге. При этом все элементы остаются
доступными для экранных читалок.Правильная работа ARIA невозможна без корректного управления фокусом:
false.tabindex="0" для контейнера шага, чтобы обеспечить
корректный переход клавишей Tab.Для специфических сценариев можно вручную добавлять ARIA-атрибуты к шагам:
document.querySelector('#step1').setAttribute('aria-label', 'Начало процесса');
document.querySelector('#step2').setAttribute('aria-describedby', 'step2Description');
При этом важно следить, чтобы id, указанный в aria-describedby, был уникальным и содержал читаемый текст.
Intro.js поддерживает возможность затемнения фона с сохранением доступности:
introJs().setOptions({
highlightClass: 'introjs-highlight',
overlayOpacity: 0.7
});
При этом библиотека автоматически выставляет aria-hidden=“true” на все элементы, которые не являются активным шагом. Важно проверять, что интерактивные элементы (кнопки, поля ввода) вне шага недоступны для клика, но скрыты от экранных читалок.
Если шаги создаются или изменяются динамически, необходимо обновлять ARIA-атрибуты вручную для новых элементов:
introJs().onbeforechange(function(targetElement) {
targetElement.setAttribute('aria-live', 'polite');
});
Правильная интеграция ARIA делает интерактивные инструкции Intro.js доступными для всех пользователей, обеспечивая удобство навигации и полного понимания интерфейса.