Spec-Zone.ru › Web APIs

XRSession: событие squeezestart

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

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

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

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

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

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

Основные действия сжатия — это действия, предназначенные для имитации сжатия или схватывания руками, и их можно смоделировать с помощью триггеров на контроллерах.

Синтаксис

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

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

onsqueezestart = (event) => {};

Тип события

An XRInputSourceEvent. Наследуется от Event.

Событие XRInputSourceEvent

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

Помимо перечисленных ниже свойств, доступны свойства родительского интерфейса Event.

frame Только для чтения

Объект XRFrame, предоставляющий необходимую информацию о кадре события во время его возникновения. Этот кадр мог быть рендерен ранее, а не в текущий момент. Поскольку это кадр события, а не кадр анимации, вы не можете вызвать XRFrame.getViewerPose() на нём; вместо этого используйте getPose().

inputSource Только для чтения

Объект XRInputSource, указывающий, какой источник ввода сгенерировал событие ввода.

Описание

Триггер

Срабатывает, когда пользователь начинает сжимать контроллер, выполняя жест рукой, имитирующий захват объекта, или нажимая (сжимая) триггер.

Сценарии использования

Событие squeezestart отправляется, чтобы указать, что пользователь начал действие сжатия.

Если основное действие сжатия завершается успешно, сессия отправляет событие squeeze.

Событие squeezeend отправляется, чтобы указать, что действие сжатия больше не выполняется. Это отправляется независимо от того, было ли действие сжатия успешным или нет.

Примеры

В следующем примере используется addEventListener() для создания обработчиков событий сжатия: squeezestart, squeezeend и squeeze. Этот фрагмент кода является ядром обработчика событий, позволяющего пользователю захватывать объекты в сцене и перемещать их.

В этом случае используется одна функция для обработки всех трех событий, что позволяет им использовать общие участки кода, не зависящие от типа события. Только после выполнения этих задач функция onSqueezeEvent() ниже вызывает специальную функцию для обработки действий.

После проверки, является ли полученное событие событием tracked-pointer (единственным типом, обрабатываемым здесь), позиция целевого луча получается с помощью getPose().

Если позиция целевого луча была успешно получена, код использует значение свойства Event type для перенаправления управления в соответствующую функцию обработки события:

  • Для событий squeezestart вызывается функция myBeginTracking() с матрицей matrix позиции целевого луча. Функция myBeginTracking(), предположительно, запускает процесс захвата объекта, используя преобразование для выполнения проверки попадания, определяя, какой объект подхватить. myBeginTracking() возвращает объект, представляющий объект, который пользователь начал перетаскивать.
  • При получении события squeeze вызывается функция myDropObject() с объектом как входом. Это помещает объект в его новое положение в мире и запускает любые эффекты, которые могут возникнуть, такие как планирование анимации всплеска при падении в воду и т. д.
  • Событие squeezeend приводит к вызову функции myStopTracking() с перетаскиваемым объектом и преобразованием окончательной позиции целевого луча.
xrSession.addEventListener("squeezestart", onSqueezeEvent);
xrSession.addEventListener("squeeze", onSqueezeEvent);
xrSession.addEventListener("squeezeend", onSqueezeEvent);

function onSqueezeEvent(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 "squeezestart":
      targetObj = myBeginTracking(targetRayPose.matrix);
      break;
    case "squeeze":
      myDropObject(targetObj, targetRayPose.matrix);
      break;
    case "squeezeend":
      myStopTracking(targetObj, targetRayPose.matrix);
      break;
  }
}

Также можно настроить обработчик этих событий, установив свойства обработчиков событий объекта XRSession в функцию, которая обрабатывает событие:

xrSession.onsqueezestart = onSqueezeEvent;
xrSession.onsqueeze = onSqueezeEvent;
xrSession.onsqueezeend = onSqueezeEvent;

Спецификации

Спецификация
WebXR Device API
# eventdef-xrsession-squeezestart
WebXR Device API
# dom-xrsession-onsqueezestart

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
squeezestart_event 83 83 Нет 69 Нет 83 Нет 59 Нет 13.0 Нет

© 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/squeezestart_event

Spec-Zone.ru

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