ToolAct工具行動

手把測試

在瀏覽器中測試手把按鍵、搖桿、扳機、十字鍵和震動

未偵測到手把
請連接手把並按下任一按鍵以啟用
LBRBYXBA

左搖桿

X 軸: 0.00Y 軸: 0.00
已置中

右搖桿

X 軸: 0.00Y 軸: 0.00
已置中

扳機

LT
0.00
RT
0.00

震動測試

目前手把或瀏覽器不支援震動。

事件歷史

按下手把按鍵開始測試...

什麼是手把測試?

手把測試透過 W3C Gamepad API 讀取控制器回傳給瀏覽器的訊號,並即時顯示:每一次按鍵、搖桿位置、扳機深度、十字鍵方向和震動馬達。它是開打前確認手把是否正常、排查面鍵連點、發現老手把搖桿漂移、驗證雙震動馬達是否都作動的最快方式。頁面會在 Xbox 風格的版面上高亮顯示每個輸入,呈現搖桿與扳機的原始數值,並保留簡短的事件紀錄。由於 Gamepad API 只在你按下手把上的按鍵後才會暴露控制器,頁面會先提示你按下任一按鍵——這是瀏覽器的安全規則,不是手把故障。所有操作都在瀏覽器本地完成,輸入資料不會離開你的裝置。

使用方法

如何使用

  1. 透過 USB 或 Bluetooth 連接手把
  2. 按下手把上的任一按鍵以啟用
  3. 觀察畫面版面隨按鍵與搖桿動作高亮顯示
  4. 使用震動按鈕測試震動馬達
  5. 查看事件歷史,確認每次按壓都已識別

小提醒

  • 綠色高亮表示輸入已正確到達瀏覽器
  • 控制器只有在按下任一按鍵後才會出現——這是瀏覽器的安全規則
  • 震動支援視瀏覽器與手把而定,Firefox 支援最完整
  • 若搖桿靜止時數值不為 0,漂移標籤會提示搖桿漂移
  • 多個已連線的手把可透過插槽標籤互相切換

使用情境

診斷失靈或連點的按鍵依序輕按每個面鍵、肩鍵和十字鍵方向,觀察畫面版面依真實按鍵狀態亮起。事件歷史會記下每一次按下與放開,因此單次按壓觸發兩次、或完全沒反應的開關,會立刻與正常按鍵形成對比。
偵測搖桿漂移將兩個搖桿置中,讀取即時 X/Y 數值。正常的搖桿靜止時應接近 0.00;當搖桿靜止時某個軸超過約 0.12,漂移標籤會轉為橘色——這是搖桿模組磨損的典型症狀,會讓角色或游標自行偏移。
驗證扳機線性度緩慢扣動 LT 和 RT,觀察數值在扳機條上從 0.00 升到 1.00。扳機如果跳動、過早滿值或達不到滿值,代表電位器磨損——在怪罪賽車遊戲的油門手感之前,先確認這一點很有用。
獨立測試震動馬達弱震、強震和雙震動按鈕透過 GamepadHapticActuator API 分別驅動高頻與低頻馬達。如果只有一個檔位能震,表示有一顆馬達故障;如果完全沒反應,要麼手把、要麼瀏覽器不支援震動,頁面會明確提示這一點。
識別並切換多個手把狀態面板顯示每個手把的廠商 ID 字串、映射類型(標準/非標準)、插槽、按鍵數與軸數。配對多個手把時,插槽標籤讓你不用重新連線就能在它們之間切換——適合本地多人開打前檢查一整組手把。

技術原理

瀏覽器透過 W3C Gamepad API 暴露手把。一個控制器由從 navigator.getGamepads() 取得的 Gamepad 物件表示,該函式最多回傳四個插槽。每個 gamepad 帶有一個 id 字串(廠商與產品)、一個 mapping 欄位(Xbox 版面裝置為 'standard',否則為空)、一個 buttons 陣列和一個 axes 陣列。 在標準映射下,buttons 有 17 項:四個面鍵(A/B/X/Y)、兩個肩鍵(LB/RB)、兩個類比扳機(LT/RT)、Select/Start、兩個搖桿按壓(L3/R3)、四個十字鍵方向和 Home/Guide 鍵。每個按鈕暴露 .pressed(布林)和 .value(0 到 1——扳機是類比量,數位按鍵為 0 或 1)。axes 陣列保存四個 -1 到 1 的值:左搖桿 X/Y,接著右搖桿 X/Y。 這個 API 採用輪詢而非事件驅動,因此頁面執行 requestAnimationFrame 迴圈,每幀讀取一份新快照。為避免手把靜止時無意義的重複渲染,只在 gamepad.timestamp 變化時才更新狀態——這個時間戳會在每份新輸入報告上遞增。連線與斷線透過 window 的 gamepadconnected 和 gamepaddisconnected 事件到達。 基於安全考量,gamepad 物件在使用者按下手把上的按鍵之前保持 null,因此頁面無法靜默讀取剛插上的手把。震動是選用功能:如果 gamepad.vibrationActuator 存在,呼叫 playEffect('dual-rumble', { duration, weakMagnitude, strongMagnitude }) 即可驅動兩顆馬達;Safari 和部分 Chromium 版本未實作此功能,這也是頁面做特性偵測、並在不支援時停用按鈕的原因。

  • navigator.getGamepads() 最多回傳四個插槽;只有在按下手把按鍵後對應插槽才非 null。
  • 標準映射:buttons[0-3] 面鍵、[4-5] 肩鍵、[6-7] 類比扳機、[8-9] Select/Start、[10-11] L3/R3、[12-15] 十字鍵、[16] Home。
  • axes[0-1] 為左搖桿(X、Y),axes[2-3] 為右搖桿,數值範圍均為 -1 到 1。
  • 輪詢模型:requestAnimationFrame 迴圈讀取快照;以 gamepad.timestamp 作為閘門,靜止幀不做任何更新。
  • 震動透過 gamepad.vibrationActuator.playEffect('dual-rumble', ...) 驅動——需特性偵測,並非所有瀏覽器都支援。
  • gamepadconnected / gamepaddisconnected 事件表示連線與斷線;手把的 .index 識別其插槽。

範例

按下面鍵

按下 A -> buttons[0].pressed = true,value = 1.0

推動左搖桿

左搖桿推向右上 -> axes[0] = 0.71,axes[1] = -0.68

扣動扳機

RT 扣到一半 -> buttons[7].value = 0.50,pressed = false(低於閾值)

常見問題

為什麼插上手把後沒有反應?

Gamepad API 會一直隱藏控制器,直到你按下手把上的按鍵,以防網頁靜默指紋辨識已連線的裝置。透過 USB 或 Bluetooth 連接手把、聚焦此分頁後,按下任一按鍵——狀態面板就會切換為「已連線」。這個啟用步驟是瀏覽器的安全規則,並非故障。

支援哪些控制器?

任何瀏覽器以標準映射暴露的控制器:Xbox One/Series 手把、DualShock 4 與 DualSense(多數系統會映射為標準),以及大多數通用 USB 手把。無論 Bluetooth 或 USB,瀏覽器都會將它們正規化為同樣的 17 按鍵、4 軸版面。非標準手把仍可使用,但按鍵順序可能與畫面標籤不一致。

為什麼震動沒作用?

震動支援因環境而異。Firefox 支援最完整;Chrome 與 Edge 在較新版本支援;Safari 則未實作。手把本身也必須暴露 gamepad.vibrationActuator。頁面會偵測這一點,並在不支援時明確顯示「不支援」訊息,而不是靜默無反應,因此震動缺失是瀏覽器或硬體限制,不是本工具的問題。

搖桿沒碰到卻顯示數值,是壞了嗎?

接近 0 的小數值是正常的死區雜訊。如果搖桿靜止時某個軸超過約 0.12,漂移標籤會轉為橘色——這就是典型的搖桿漂移,由電位器模組磨損引起,屬於硬體問題,通常會隨時間惡化;本工具讓你在怪罪遊戲之前先確認。

資料會上傳到伺服器嗎?

不會。Gamepad API 完全在瀏覽器本地讀取。按鍵、搖桿位置和震動指令都不會離開你的裝置,不會被記錄或傳輸。

能測試 DualSense 自適應扳機、觸控板或陀螺儀嗎?

不能。標準 Gamepad API 只暴露按鍵、搖桿軸和基本震動。DualSense 自適應扳機、電容觸控板和體感感測器不屬於 Web 標準(部分藏在實驗性擴充裡,瀏覽器支援很差),因此無法從瀏覽器可靠測試。