XRSession: событие selectstart
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.
Экспериментально: Это экспериментальная технология.
Перед использованием в производственной среде внимательно проверьте таблицу совместимости с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Событие WebXR selectstart отправляется в XRSession, когда пользователь начинает главное действие на одном из источников ввода.
Событие beforexrselect срабатывает перед этим событием и может предотвратить его срабатывание.
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или задайте обработчик событий.
addEventListener("selectstart", (event) => {});
onselectstart = (event) => {};
Тип события
Тип XRInputSourceEvent. Наследуется от Event.
Свойства события
Помимо перечисленных ниже свойств, доступны свойства из родительского интерфейса Event.
-
frameТолько для чтения -
Объект
XRFrame, предоставляющий необходимую информацию о кадре события во время его возникновения. Этот кадр может быть рендерен в прошлом, а не в текущем кадре. Поскольку это кадр события, а не кадр анимации, нельзя вызватьXRFrame.getViewerPose()на нем; вместо этого используйтеgetPose(). -
inputSourceТолько для чтения -
Объект
XRInputSource, указывающий, какой источник ввода сгенерировал событие ввода.
Описание
Триггер
Срабатывает при нажатии триггеров или кнопок, нажатии тачпада, произнесении команды или выполнении распознаваемого жеста при использовании системы отслеживания видео или контроллера с акселерометром.
Примеры использования
События selectstart и selectend сообщают вам, когда вы можете отобразить пользователю информацию о том, что происходит главное действие. Это может быть, например, изменение цвета контроллера с нажатой кнопкой или отображение целевого объекта, который берут и перемещают, начиная с события selectstart и заканчивая событием selectend.
Событие select сообщает вашему коду, что пользователь завершил желаемое действие. Это может быть как простое бросание объекта, или нажатие спускового крючка в игре, или более сложное размещение перетащенного объекта в новом месте.
Если ваше главное действие — простое нажатие триггера и вам не нужно ничего анимировать во время его нажатия, вы можете пропустить события selectstart и selectend и действовать только на событии старта.
Примеры
В следующем примере используется addEventListener() для создания обработчиков событий выбора: selectstart, selectend и select. Этот фрагмент — ядро обработчика событий, позволяющего пользователю брать объекты в сцене и перемещать их.
В этом случае используется одна функция для обработки всех трех событий, позволяющая им использовать общий код, независимо от того, какое из трех событий было получено. Только после завершения этих задач функция onSelectionEvent() ниже передает действие в специализированную функцию для обработки.
После проверки того, что полученное событие — это событие tracked-pointer (единственный тип, который мы обрабатываем здесь), извлекается положение целевого луча с помощью getPose().
Если положение целевого луча было извлечено успешно, код использует значение свойства Event type для перенаправления управления в соответствующую функцию для обработки поступившего события:
- Для событий
selectstartвызывается функцияmyBeginTracking()с матрицейmatrixположения целевого луча. ФункцияmyBeginTracking(), вероятно, начнёт процесс перетаскивания объекта, используя преобразование для выполнения проверки попадания, определяя, какой объект взять. ФункцияmyBeginTracking()возвращает объект, который пользователь начал перетаскивать. - При получении события
selectвызывается функцияmyDropObject()с целевым объектом и текущим преобразованием положения целевого луча в качестве входных данных. Это помещает объект в новое положение в мире и вызывает любые эффекты, которые могут возникнуть, например, планирование анимации всплеска, если объект уронить в воду. - Событие
selectendприводит к вызову функцииmyStopTracking()с перетаскиваемым объектом и преобразованием окончательного положения целевого луча.
xrSession.addEventListener("selectstart", onSelectionEvent);
xrSession.addEventListener("select", onSelectionEvent);
xrSession.addEventListener("selectend", onSelectionEvent);
function onSelectionEvent(event) {
let source = event.inputSource;
let targetObj = null;
if (source.targetRayMode !== "tracked-pointer") {
return;
}
let targetRayPose = event.frame.getPose(source.targetRaySpace, myRefSpace);
if (!targetRayPose) {
return;
}
switch (event.type) {
case "selectstart":
targetObj = myBeginTracking(targetRayPose.matrix);
break;
case "select":
myDropObject(targetObj, targetRayPose.matrix);
break;
case "selectend":
myStopTracking(targetObj, targetRayPose.matrix);
break;
}
}
Также можно настроить обработчик для событий selectend путём установки свойства обработчика событий onselectend объекта XRSession в функцию, которая обрабатывает событие:
xrSession.onselectstart = onSelectionEvent; xrSession.onselect = onSelectionEvent; xrSession.onselectend = onSelectionEvent;
Спецификации
| Спецификация |
|---|
| API устройства WebXR # eventdef-xrsession-selectstart |
| API устройства WebXR # dom-xrsession-onselectstart |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
selectstart_event |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/XRSession/selectstart_event