В экосистеме WebXR библиотека A-Frame выступает как декларативная надстройка над низкоуровневым API. При работе в AR-режиме A-Frame опирается на возможности WebXR Device API и браузерную реализацию дополнений, в частности механизма DOM Overlay.
DOM Overlay — это расширение WebXR, позволяющее отображать обычные
HTML-элементы поверх AR-сцены. В отличие от 3D-объектов внутри
<a-scene>, такие элементы рендерятся стандартным
движком браузера и остаются частью классического DOM.
В A-Frame AR-функциональность чаще всего используется совместно с:
DOM Overlay относится именно к WebXR и поддерживается браузерами, реализующими соответствующее расширение.
В классическом VR-интерфейсе элементы управления часто создаются как 3D-объекты: кнопки, панели, текстовые блоки. Однако в AR такой подход имеет ограничения:
DOM Overlay решает эти проблемы, позволяя:
click, input,
submit без 3D-прослоек.DOM Overlay активируется при создании XR-сессии с указанием специальной опции:
navigator.xr.requestSession("immersive-ar", {
requiredFeatures: ["dom-overlay"],
domOverlay: { root: document.getElementById("overlay") }
});
Ключевые параметры:
requiredFeatures: ["dom-overlay"] — обязательное
указание поддержки расширения;domOverlay.root — DOM-элемент, который будет
отображаться поверх AR-сцены.В A-Frame управление XR-сессией происходит через системный компонент
webxr внутри <a-scene>.
В A-Frame активация осуществляется через атрибут
webxr:
<a-scene
webxr="requiredFeatures: dom-overlay;
overlayElement: #overlay">
</a-scene>
Параметры:
requiredFeatures: dom-overlayoverlayElement: #overlay — CSS-селектор корневого
элементаHTML-структура:
<div id="overlay">
<button id="infoBtn">Информация</button>
</div>
<a-scene webxr="requiredFeatures: dom-overlay; overlayElement: #overlay">
<a-box position="0 0 -1"></a-box>
</a-scene>
После входа в AR-сессию кнопка останется поверх камеры, но будет частью XR-интерфейса.
Элемент overlay находится в обычном DOM и ведёт себя как
стандартный HTML-блок.
DOM возвращается в стандартный режим отображения.
DOM Overlay не требует A-Frame-компонентов для базового взаимодействия:
document.getElementById("infoBtn")
.addEventListener("click", () => {
console.log("Кнопка нажата");
});
События работают нативно:
clickinputchangesubmitkeydownЭто принципиальное отличие от 3D UI внутри сцены, где используются
cursor и raycaster.
Поскольку элементы остаются HTML-узлами, используется стандартный CSS:
#overlay {
position: fixed;
bottom: 20px;
width: 100%;
text-align: center;
}
button {
padding: 12px 20px;
font-size: 18px;
}
Особенности:
transition и
animation.Однако следует учитывать:
Часто требуется синхронизация DOM Overlay с объектами сцены A-Frame.
Пример: переключение видимости 3D-объекта через кнопку.
const box = document.querySelector("a-box");
document.getElementById("infoBtn")
.addEventListener("click", () => {
box.setAttribute("visible", false);
});
DOM-элемент управляет 3D-логикой через стандартные методы A-Frame:
setAttributegetAttributeemitaddEventListenerПоддержка браузеров Реализовано не во всех мобильных браузерах.
Один root-элемент Можно указать только один корневой контейнер.
Отсутствие глубины DOM Overlay всегда поверх AR-контента, без возможности частичного перекрытия 3D-объектами.
Производительность Сложные UI-интерфейсы могут влиять на частоту кадров AR-сессии.
| Критерий | 3D UI | DOM Overlay |
|---|---|---|
| Рендеринг | WebGL | HTML/CSS |
| Ввод текста | Сложный | Нативный |
| Анимации | Через компоненты | Через CSS |
| Производительность | Зависит от сцены | Зависит от DOM |
| Глубина | 3D-пространство | Поверх сцены |
3D UI подходит для иммерсивных панелей, встроенных в мир. DOM Overlay — для системных кнопок, форм и вспомогательных элементов.
Поскольку overlay — это обычный DOM, возможна интеграция с:
A-Frame остаётся ответственным за 3D-сцену, а фреймворк — за интерфейс.
Архитектурно это разделяет:
Иногда требуется реагировать на начало AR-сессии:
const scene = document.querySelector("a-scene");
scene.addEventListener("enter-vr", () => {
console.log("AR/VR сессия начата");
});
scene.addEventListener("exit-vr", () => {
console.log("Сессия завершена");
});
В AR-режиме события enter-vr используются аналогично VR,
поскольку A-Frame унифицирует обработку XR-сессий.
Браузер накладывает ограничения:
alert() во время XR-сессии в
некоторых реализациях.Рекомендуется:
DOM Overlay особенно эффективен в мобильных AR-приложениях, где пользователю требуется привычный интерфейс поверх изображения камеры.
Типичная структура проекта:
index.html
├── <div id="overlay">
│ └── UI-компоненты
└── <a-scene webxr="...">
└── 3D-объекты
Разделение ответственности:
Такой подход формирует гибридную модель разработки, где WebGL и традиционный DOM сосуществуют в рамках одной XR-сессии.