Библиотека fullPage.js изначально ориентирована на создание эффектных полноэкранных сайтов с вертикальной и горизонтальной прокруткой. Однако при работе с интерактивными веб-интерфейсами важно учитывать пользователей экранных читалок. Без корректной настройки такой сайт может быть практически недоступен для людей с нарушениями зрения. fullPage.js предоставляет несколько подходов и возможностей для повышения доступности.
Каждый слайд в fullPage.js должен быть корректно размечен с точки зрения ARIA (Accessible Rich Internet Applications). Основные моменты:
section) или слайд (slide) следует объявлять
как регион, чтобы экранные читалки могли воспринимать его как
самостоятельную единицу контента.Пример разметки слайдов:
<div id="fullpage">
<div class="section" role="region" aria-label="Главная страница">
<h2>Главная</h2>
<p>Содержимое первой секции.</p>
</div>
<div class="section" role="region" aria-label="О нас" aria-hidden="true">
<h2>О нас</h2>
<p>Содержимое второй секции.</p>
</div>
</div>
При переключении слайдов библиотека позволяет динамически обновлять атрибут aria-hidden, чтобы активный раздел был доступен, а все остальные временно игнорировались экранными читалками.
Для пользователей клавиатуры и читалок критично, чтобы фокус всегда соответствовал активной секции. fullPage.js предоставляет коллбэки, которые позволяют управлять фокусом после перехода:
new fullpage('#fullpage', {
onLeave: function(origin, destination, direction){
destination.item.setAttribute('aria-hidden', 'false');
origin.item.setAttribute('aria-hidden', 'true');
// Перемещение фокуса на первый интерактивный элемент
const focusable = destination.item.querySelector('a, button, input, textarea, select');
if(focusable) focusable.focus();
}
});
Ключевой момент — не просто перемещать визуальный контент, но и корректно обновлять состояние элементов с точки зрения читалок.
fullPage.js поддерживает навигацию с клавиатуры по умолчанию, но для доступности нужно удостовериться, что:
Пример кастомной настройки клавиатуры:
new fullpage('#fullpage', {
keyboardScrolling: true,
onLeave: function(origin, destination){
// Обновление фокуса
const firstElement = destination.item.querySelector('a, button, input');
if(firstElement) firstElement.focus();
}
});
Для динамически загружаемого контента полезно добавлять элементы уведомлений для читалок:
Пример:
<div id="screen-reader-notifier" role="status" aria-live="polite" class="sr-only"></div>
new fullpage('#fullpage', {
afterLoad: function(origin, destination){
const notifier = document.getElementById('screen-reader-notifier');
notifier.textContent = `Вы перешли на секцию: ${destination.item.querySelector('h2').textContent}`;
}
});
h2 или выше.aria-hidden="true".aria-label.Если секции или слайды загружаются динамически:
fp_afterLoad позволяет интегрировать
логику доступности с асинхронной подгрузкой контента.fullpage_api.afterLoad = function(origin, destination){
destination.item.setAttribute('aria-hidden', 'false');
const firstFocusable = destination.item.querySelector('a, button, input');
if(firstFocusable) firstFocusable.focus();
};
Соблюдение этих принципов позволяет интегрировать fullPage.js в проекты с высокими требованиями доступности, делая интерактивный контент удобным для всех пользователей.