Shepherd.js — это библиотека для создания интерактивных пошаговых руководств на веб-страницах. Одной из ключевых задач при разработке таких туров является обеспечение доступности для пользователей со слабым зрением, использующих скринридеры. Shepherd.js имеет встроенные механизмы для работы с технологиями доступности, что позволяет сделать интерфейс более инклюзивным.
Каждый шаг тура в Shepherd.js создаётся как отдельный DOM-элемент. Для поддержки скринридеров библиотека автоматически назначает важные ARIA-атрибуты:
Пример конфигурации шага с ARIA:
const tour = new Shepherd.Tour({
defaults: {
classes: 'shepherd-theme-arrows',
scrollTo: true,
showCancelLink: true
}
});
tour.addStep({
id: 'intro-step',
text: 'Это первый шаг вашего руководства.',
attachTo: { element: '.start-button', on: 'bottom' },
buttons: [
{
text: 'Далее',
action: tour.next
}
],
title: 'Введение',
when: {
show: () => {
const stepEl = document.querySelector('.shepherd-step');
stepEl.setAttribute('role', 'dialog');
stepEl.setAttribute('aria-labelledby', 'shepherd-step-title');
stepEl.setAttribute('aria-describedby', 'shepherd-step-content');
}
}
});
Shepherd.js автоматически переносит фокус на активный
шаг при его отображении, что критично для скринридеров. Это
реализуется через метод focus(), применяемый к основному
контейнеру шага:
При необходимости можно вручную управлять последовательностью фокуса
с помощью события show:
tour.on('show', (event) => {
const stepElement = event.step.el;
stepElement.focus();
});
Ключевой аспект доступности — возможность перемещаться между шагами без мыши. Shepherd.js поддерживает:
Enter или
Space.Shift+Tab или
специальных кнопок.Esc.Эти функции встроены по умолчанию, но их можно расширить, добавив
собственные обработчики событий keydown на элементы
шагов.
Для оптимальной работы скринридеров рекомендуется, чтобы шаги использовали семантические HTML-теги:
<h1>–<h6>) для
title.<p>) или списки
(<ul>/<li>) для описаний
text.<button>) для навигации.Пример:
tour.addStep({
id: 'feature-step',
title: '<h2 id="shepherd-step-title">Особенности</h2>',
text: '<p id="shepherd-step-content">Эта функция позволяет выполнять важные действия.</p>',
buttons: [
{
text: '<button>Далее</button>',
action: tour.next
}
]
});
Для динамического обновления контента шагов можно использовать
ARIA live regions. Shepherd.js позволяет назначать
контейнеру шагов aria-live="polite" или
aria-live="assertive", что гарантирует, что скринридер
озвучит новые шаги автоматически.
const stepElement = document.querySelector('.shepherd-step');
stepElement.setAttribute('aria-live', 'polite');
polite — уведомление без прерывания текущего
чтения.assertive — немедленное озвучивание контента.Shepherd.js совместим с инструментами проверки доступности, такими как axe и Lighthouse, позволяя убедиться, что:
id и соответствующие
aria-labelledby/aria-describedby.display: none,
используйте aria-hidden.Эти подходы делают Shepherd.js туры полностью доступными, улучшая взаимодействие для пользователей с нарушениями зрения и обеспечивая соответствие стандартам WCAG.