XRSession:squeeze 事件
當會話的一個輸入源完成了主要擠壓操作時,WebXR squeeze 事件會被髮送到 XRSession。常見的初級操作的例子包括使用者按下扳機或按鈕、觸控觸控板、說出命令,或者在使用帶有加速計的影片追蹤系統或手持控制器時執行可識別的手勢。
有關 squeezestart、squeeze 和 squeezeend 事件如何工作以及您應該如何響應它們的詳細資訊,請參閱 輸入和輸入源。
語法
在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。
addEventListener("squeeze", (event) => { })
onsqueeze = (event) => { }
事件型別
一個 XRInputSourceEvent。繼承自 Event。
事件屬性
除了下面列出的屬性之外,父介面 Event 的屬性也可使用。
frame只讀-
一個
XRFrame物件,提供事件發生期間所需的事件幀資訊。此幀可能是在過去渲染的,而不是當前的幀。因為這是一個事件幀,而不是動畫幀,所以您不能在其上呼叫XRFrame.getViewerPose();而是使用getPose()。 inputSource只讀-
一個
XRInputSource物件,指示是哪個輸入源生成了此輸入事件。
描述
觸發
當用戶擠壓控制器、做出模仿抓取東西的手勢或使用(擠壓)扳機時觸發。
用例
squeezestart 事件表示使用者已開始擠壓操作。
如果主要擠壓操作成功結束,則會向會話傳送 squeeze 事件。
傳送 squeezeend 事件以指示擠壓操作不再進行中。無論擠壓操作是否成功,都會發送此事件。
示例
以下示例使用 addEventListener() 來設定 squeeze 事件的控制代碼。該控制代碼會獲取代表 tracked-pointer 輸入目標射線的姿勢,並將姿勢的變換髮送到一個名為 myHandleSqueezeWithRay() 的函式。
此程式碼將擠壓視為一個瞬時操作,不涉及追蹤正在進行中的活動。如果您需要追蹤非瞬時的擠壓操作,請監聽 squeezestart 和 squeezeend 事件,以感知擠壓操作的開始和結束。
xrSession.addEventListener("squeeze", (event) => {
if (event.inputSource.targetRayMode === "tracked-pointer") {
let targetRayPose = event.frame.getPose(
event.inputSource.targetRaySpace,
myRefSpace,
);
if (targetRayPose) {
myHandleSqueezeWithRay(targetRayPose.transform);
}
}
});
您還可以透過將 XRSession 物件的 onsqueeze 事件控制代碼屬性設定為處理該事件的函式來設定 squeeze 事件的控制代碼。
xrSession.onsqueeze = (event) => {
if (event.inputSource.targetRayMode === "tracked-pointer") {
let targetRayPose = event.frame.getPose(
event.inputSource.targetRaySpace,
myRefSpace,
);
if (targetRayPose) {
myHandleSqueezeWithRay(targetRayPose.transform);
}
}
};
規範
| 規範 |
|---|
| WebXR Device API # eventdef-xrsession-squeeze |
| WebXR Device API # dom-xrsession-onsqueeze |
瀏覽器相容性
載入中…
另見
squeezestart和squeezeend事件