XRSession: select 事件

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

當會話的一個輸入源完成了 主要操作 時,WebXR select 事件會發送給 XRSession

beforexrselect 事件觸發後,會引發此事件,並且可以阻止此事件被觸發。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("select", (event) => { })

onselect = (event) => { }

事件型別

一個 XRInputSourceEvent。繼承自 Event

Event XRInputSourceEvent

事件屬性

除了下面列出的屬性之外,父介面 Event 的屬性也可使用。

frame 只讀

一個 XRFrame 物件,提供事件發生期間所需的事件幀資訊。此幀可能是在過去渲染的,而不是當前的幀。因為這是一個事件幀,而不是動畫幀,所以您不能在其上呼叫 XRFrame.getViewerPose();而是使用 getPose()

inputSource 只讀

一個 XRInputSource 物件,指示是哪個輸入源生成了此輸入事件。

描述

觸發

當用戶按下觸發器或按鈕、輕觸觸控板、說出命令或在使用影片跟蹤系統或帶加速度計的手持控制器時執行可識別的手勢時,會觸發此事件。

用例

selectstartselectend 事件會告知您何時可能需要向用戶顯示一些內容,以指示主要操作正在進行。這可能包括用新顏色繪製帶有啟用按鈕的控制器,或者在 `selectstart` 到達時開始、在 `selectend` 收到時停止顯示被抓取和移動的目標物件。

select 事件會告知您的程式碼使用者已完成一項操作。這可能很簡單,比如在遊戲中扔一個物體或扣動槍的扳機,或者像將拖動的物體放置在新位置一樣複雜。

如果您的主要操作是一個簡單的觸發器操作,並且您在觸發器接合期間不需要為任何內容設定動畫,您可以忽略 selectstartselectend 事件,並在開始事件上執行操作。

示例

以下示例使用 addEventListener() 來設定 `select` 事件的事件處理程式。該處理程式獲取代表 `tracked-pointer` 輸入的目標射線(ray)的姿態,並將姿態的變換髮送到一個名為 `myHandleSelectWithRay()` 的函式。

js
xrSession.addEventListener("select", (event) => {
  if (event.inputSource.targetRayMode === "tracked-pointer") {
    let targetRayPose = event.frame.getPose(
      event.inputSource.targetRaySpace,
      myRefSpace,
    );
    if (targetRayPose) {
      myHandleSelectWithRay(targetRayPose.transform);
    }
  }
});

您也可以透過將 XRSession 物件的 `onselect` 事件處理程式屬性設定為處理該事件的函式來設定 `select` 事件的處理程式。

js
xrSession.onselect = (event) => {
  if (event.inputSource.targetRayMode === "tracked-pointer") {
    let targetRayPose = event.frame.getPose(
      event.inputSource.targetRaySpace,
      myRefSpace,
    );
    if (targetRayPose) {
      myHandleSelectWithRay(targetRayPose.transform);
    }
  }
};

規範

規範
WebXR Device API
# eventdef-xrsession-select
WebXR Device API
# dom-xrsession-onselect

瀏覽器相容性

另見