Waypoints — это библиотека для отслеживания положения элементов на странице при прокрутке. Она активно применяется для создания интерактивных интерфейсов, а корректное использование ARIA-атрибутов позволяет сделать эти взаимодействия доступными для пользователей с особыми потребностями.
ARIA (Accessible Rich Internet Applications) — набор атрибутов, которые добавляют семантическое значение элементам HTML и делают динамический контент доступным для технологий вспомогательного доступа, таких как экранные читалки. ARIA не заменяет стандартные HTML-элементы, а дополняет их.
Ключевые типы атрибутов:
button, progressbar, alert и
др.).polite, assertive).true или false).Waypoints отслеживает появление элемента в видимой области
(viewport) и вызывает callback-функцию. Если это изменение
несёт информационное значение для пользователя, следует использовать
ARIA для обеспечения доступности.
<div id="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
Прогресс прокрутки: 0%
</div>
<section id="step1">...</section>
<section id="step2">...</section>
<section id="step3">...</section>
var progress = document.getElementById('progress');
var waypoint1 = new Waypoint({
element: document.getElementById('step1'),
handler: function(direction) {
progress.setAttribute('aria-valuenow', '33');
progress.textContent = 'Прогресс прокрутки: 33%';
}
});
var waypoint2 = new Waypoint({
element: document.getElementById('step2'),
handler: function(direction) {
progress.setAttribute('aria-valuenow', '66');
progress.textContent = 'Прогресс прокрутки: 66%';
}
});
var waypoint3 = new Waypoint({
element: document.getElementById('step3'),
handler: function(direction) {
progress.setAttribute('aria-valuenow', '100');
progress.textContent = 'Прогресс прокрутки: 100%';
}
});
Пояснение: использование
role="progressbar" и aria-valuenow позволяет
экранным читалкам оповещать пользователя о текущем состоянии прокрутки.
Waypoints автоматически обновляет значение атрибута при достижении
определённого элемента.
Waypoints часто применяется для показа или скрытия блоков контента
при прокрутке. Чтобы изменения были доступными, применяются атрибуты
aria-hidden и aria-live.
<div id="announcement" aria-live="polite" aria-hidden="true">
Новое событие появилось!
</div>
var announcement = document.getElementById('announcement');
var waypoint = new Waypoint({
element: document.getElementById('special-section'),
handler: function(direction) {
announcement.setAttribute('aria-hidden', 'false');
},
offset: '75%'
});
Пояснение: aria-live="polite"
уведомляет пользователя о появлении нового контента без прерывания
текущего чтения. Атрибут aria-hidden скрывает элемент до
момента, когда он становится видимым.
Иногда Waypoints используется для прокрутки к важным секциям. В этом случае важно правильно управлять фокусом и ролями элементов:
var waypoint = new Waypoint({
element: document.getElementById('important-section'),
handler: function(direction) {
var section = document.getElementById('important-section');
section.setAttribute('tabindex', '-1'); // делаем секцию фокусируемой
section.focus();
section.setAttribute('aria-label', 'Важная секция контента');
}
});
Ключевые моменты:
tabindex="-1" позволяет программно установить
фокус на элемент.aria-label добавляет понятное описание для экранных
читалок.aria-hidden="false" и
aria-live.aria-valuenow, может
создавать шум для пользователей экранных читалок.<header>, <main>,
<section>).Waypoints можно использовать совместно с компонентами, такими как
вкладки (tablist), аккордеоны (aria-expanded)
и модальные окна (aria-modal). При этом важно:
Эффективная интеграция ARIA с Waypoints позволяет создать страницы с динамическим контентом, которые остаются полностью доступными и понятными для всех пользователей.