延續昨天的 EyeDropper API,我們今天來看看另外一組「輸入相關」的 Web API:Pointer Lock API 與 Keyboard Lock API。
它們有個共同點:鎖定輸入裝置,讓瀏覽器能更沉浸、更接近遊戲體驗。
平常滑鼠移動時,游標會受限於螢幕邊界。而 Pointer Lock API 允許我們「鎖定」滑鼠:
這對 第一人稱遊戲 (FPS)、3D 建模、沉浸式體驗 都很重要。
const area = document.getElementById("game-area");
// 點擊進入 Pointer Lock
area.addEventListener("click", () => {
area.requestPointerLock();
});
// 監聽滑鼠移動
document.addEventListener("mousemove", (e) => {
if (document.pointerLockElement === area) {
console.log(`相對移動: dx=${e.movementX}, dy=${e.movementY}`);
}
});
來個好玩的範例~ 一定要玩玩看喔 🎉
平常瀏覽器會攔截某些按鍵:
F1
→ 開啟說明Esc
→ 退出全螢幕Alt+Tab
→ 系統切換視窗Keyboard Lock API 允許網站「鎖定」部分鍵盤輸入,不再被瀏覽器攔截。這對:
// 請求鎖定指定按鍵
navigator.keyboard.lock(["F1", "Escape"]);
// 監聽鍵盤事件
window.addEventListener("keydown", (e) => {
console.log("鍵盤輸入:", e.key);
});
// 解除鎖定
navigator.keyboard.unlock();
這兩個 API 都涉及「奪取控制權」:
安全性與使用者體驗是設計重點。這也讓我們看到,瀏覽器在「開放強大能力」與「避免惡意行為」之間的平衡。
昨天的 EyeDropper API 是「輸入的一小步」,今天的 Pointer Lock / Keyboard Lock 則是「輸入的一大步」。
它們讓 Web 不只讀取輸入,更能鎖定輸入,創造沉浸體驗。
雖然支援度不完美,但它們展示了 Web 在互動場景下的更多可能性。
👉 歡迎追蹤這個系列,我會從 Canvas 開始,一步步帶你認識更多 Web API 🎯