Element: requestPointerLock() 方法

可用性有限

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

Element 介面的 requestPointerLock() 方法允許您非同步地請求鎖定給定元素的指標。

為了跟蹤請求的成功或失敗,有必要在 Document 級別監聽 pointerlockchangepointerlockerror 事件。

注意: 在當前規範中,requestPointerLock() 僅透過觸發 pointerlockchangepointerlockerror 事件來傳達請求的成功或失敗。 對規範的提議更新 更新了 requestPointerLock() 以返回一個 Promise,該 Promise 傳達成功或失敗。此頁面記錄了返回 Promise 的版本。但是,請注意此版本尚未成為標準,並非所有瀏覽器都已實現。有關更多資訊,請參閱 瀏覽器相容性

語法

js
requestPointerLock()
requestPointerLock(options)

引數

options 可選

一個選項物件,其中可以包含以下屬性

unadjustedMovement 可選

停用作業系統級別的滑鼠加速調整,而是訪問原始滑鼠輸入。預設值為 false;將其設定為 true 將停用滑鼠加速。

返回值

一個 Promise,它會解析為 undefined

安全

呼叫 requestPointerLock() 時需要 瞬時啟用。使用者必須與頁面或 UI 元素進行互動,此功能才能正常工作。此外,目標元素的關聯文件必須處於活動狀態。

如果呼叫 requestPointerLock() 緊接著透過預設的解鎖手勢(而不是透過 exitPointerLock() 呼叫)釋放了指標鎖,則呼叫將失敗,即使存在 瞬時啟用

如果呼叫 requestPointerLock() 時還呼叫了 requestFullscreen(),則必須先呼叫 requestPointerLock(),因為 requestFullscreen() 會消耗 瞬時啟用 的狀態。

<iframe> 元素中呼叫 requestPointerLock() 時,必須新增 allow-pointer-lock 沙箱令牌。此外,其他 <iframe> 元素中的其他元素不得處於指標鎖定模式。

示例

指標鎖定通常用於線上遊戲中,當您希望滑鼠移動專注於控制遊戲,而不受滑鼠指標四處移動、移出遊戲區域或到達視窗邊緣的干擾時。

要啟用指標鎖定,您需要讓使用者以某種方式與 UI 進行互動,例如透過按下按鈕或遊戲畫布本身。

js
canvas.addEventListener("click", async () => {
  await canvas.requestPointerLock();
});

作業系統預設啟用滑鼠加速,這在您有時需要緩慢精確移動(想想圖形軟體包)但又希望透過更快的滑鼠移動(想想滾動和選擇多個檔案)來移動大距離時很有用。然而,對於一些第一人稱視角遊戲,原始滑鼠輸入資料更適合控制相機旋轉——無論滑鼠移動是快還是慢,相同的距離移動都會導致相同的旋轉。據專業遊戲玩家稱,這可以帶來更好的遊戲體驗和更高的準確性。

要停用作業系統級別的滑鼠加速並訪問原始滑鼠輸入,您可以將 unadjustedMovement 設定為 true

js
canvas.addEventListener("click", async () => {
  await canvas.requestPointerLock({
    unadjustedMovement: true,
  });
});

有關更多示例程式碼,請參閱

規範

規範
指標鎖定 2.0
# dom-element-requestpointerlock

瀏覽器相容性

另見