Библиотека ally.js предоставляет набор утилит для
обеспечения доступности веб-приложений. Одним из ключевых инструментов
является модуль ally.element.visible, предназначенный для
проверки того, видим ли элемент на странице для пользователя, с учётом
всех факторов рендеринга и доступности.
ally.element.visible позволяет определить, доступен ли
элемент для восприятия:
display: none, visibility: hidden,
opacity: 0), и он находится в пределах видимой области окна
браузера.aria-hidden, а также другие атрибуты, которые
делают элемент недоступным.Пример использования:
import { elementVisible } from 'ally.js';
const button = document.querySelector('#submitButton');
const isVisible = elementVisible(button);
console.log(isVisible); // true или false
Функция принимает не только сам элемент, но и объект настроек, позволяющий более точно контролировать проверку видимости:
const isVisible = elementVisible(button, {
strategy: 'strict', // 'strict' или 'default'
checkOpacity: true, // учитывать прозрачность
checkVisibility: true, // учитывать visibility CSS
checkOverflow: true // учитывать скрытие через overflow
});
strict проверяет элемент комплексно, включая видимость всех
родительских элементов. default — проверяет только сам
элемент.opacity: 0.visibility: hidden.overflow: hidden родительских блоков.false.display,
visibility, opacity.aria-hidden, элемент считается
невидимым.ally.element.visible полезен при работе с элементами,
которые появляются или скрываются динамически:
const modal = document.querySelector('#modalDialog');
if (elementVisible(modal)) {
console.log('Модальное окно видно');
} else {
console.log('Модальное окно скрыто');
}
Для элементов, которые появляются с анимацией, рекомендуется использовать проверку после завершения анимации, чтобы избежать ложных отрицательных результатов.
Можно использовать вместе с MutationObserver для
отслеживания появления элементов в DOM и изменения их видимости:
const observer = new MutationObserver(() => {
if (elementVisible(button)) {
console.log('Кнопка стала видимой');
}
});
observer.observe(document.body, { childList: true, subtree: true });
Эта функция учитывает, что видимость не всегда равнозначна доступности:
opacity: 0) или за
пределами экрана, но быть доступным через клавиатуру или
скринридер.aria-hidden="true" делает элемент невидимым для
технологий доступности, даже если он видим на экране.Таким образом, ally.element.visible помогает создать
более надёжные условия для взаимодействия с элементами интерфейса,
особенно при построении доступных веб-компонентов.
strategy: 'strict' для элементов, к
которым требуется полный контроль видимости.ally.query.tabbable() и другими
методами библиотеки для построения корректного доступного
интерфейса.ally.element.visible является мощным инструментом для
определения фактической видимости элементов на странице, учитывая не
только визуальные параметры, но и доступность для всех
пользователей.