Spec-Zone.ru › Web APIs

XRSession: событие selectstart

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Экспериментально: Это экспериментальная технология.
Перед использованием в производственной среде внимательно проверьте таблицу совместимости с браузерами.

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Событие WebXR selectstart отправляется в XRSession, когда пользователь начинает главное действие на одном из источников ввода.

Событие beforexrselect срабатывает перед этим событием и может предотвратить его срабатывание.

Синтаксис

Используйте имя события в методах, таких как addEventListener(), или задайте обработчик событий.

addEventListener("selectstart", (event) => {});

onselectstart = (event) => {};

Тип события

Тип XRInputSourceEvent. Наследуется от Event.

Событие XRInputSourceEvent

Свойства события

Помимо перечисленных ниже свойств, доступны свойства из родительского интерфейса 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 Нет

См. также

  • select и selectend
  • beforexrselect

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API