Gamepad API 的 Gamepad 接口,定义了一个独立的游戏手柄或其他控制器,允许访问控制器的信息,譬如按钮按下的状态、坐标输入的位置。游戏手柄或其他控制器,允许访问如按钮按下,和ID等信息。

Gamepad 对象有两种方式返回值:通过 gamepadconnectedgamepaddisconnected 事件的  gamepad 属性,或者在任意位置抓取 Navigator.getGamepads() 方法返回的数组。

属性

Gamepad.axes 只读
一个表示控制器设备上存在的坐标轴的数组 (比如控制器摇杆)。
Gamepad.buttons 只读
一个 gamepadButton 对象的数组,表示设备上的按键的数组。
Gamepad.connected 只读
一个表示控制器是否仍然连接着系统的布尔值。
Gamepad.displayId 只读
返回与 VRDisplay 相关的 VRDisplay.displayId (如果有相关) — 控制器所控制的 VRDisplay 场景。
Gamepad.id 只读
一个包含着控制器标识信息的 DOMString
Gamepad.index 只读
一个自增的整形数字,对于当前连接到系统的每一个设备是唯一的。
Gamepad.mapping 只读
一个指示浏览器是否被映射到某个已知布局的字符串。
Gamepad.timestamp 只读
一个表示上次控制器数据更新时间的 DOMHighResTimeStamp

Gamepad 的实验性扩展

以下接口被定义于 Gamepad Extensions 规范中,且提供了诸如触觉反馈和WebVR控制器姿态方位信息等实验功能的访问。

Gamepad.hand 只读
一个枚举项,定义了控制器是用哪只手拿着的,或最可能是哪只手拿着的。
Gamepad.hapticActuators 只读
一个包含 GamepadHapticActuator 对象的数组,其中表示控制器上可用的触觉反馈硬件。
Gamepad.pose 只读
一个表示WebVR控制器姿态方位信息的 GamepadPose 对象(比如其在3D 空间中的位置和方向)。 

示例

window.addEventListener("gamepadconnected", function(e) {
  console.log("控制器已连接与 %d 位: %s. %d 个按钮, %d 个坐标方向。",
  e.gamepad.index, e.gamepad.id,
  e.gamepad.buttons.length, e.gamepad.axes.length);
});

规范

规范 状态 备注
Gamepad
Gamepad
Working Draft Initial defintion
WebVR 1.1
displayId
Draft Defines the Gamepad.displayId property.
Gamepad Extensions
Gamepad extensions
Editor's Draft Defines the Experimental extensions to Gamepad

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support

35

21 — 34 webkit

Yes

29

24 — 281

No

22

15 — 21 webkit

No
Gamepad() constructor3512

29

24 — 281

No22 No
axes

35

21 — 34 webkit

12

29

24 — 281

No

22

15 — 21 webkit

No
buttons

35

21 — 34 webkit

12

29

24 — 281

No

22

15 — 21 webkit

No
connected

35

25 — 34 webkit

12

29

24 — 281

No

22

15 — 21 webkit

No
displayId Yes2 315565 No ? ?
hand No15 Yes6 7 No No No
hapticActuators No15 Yes6 7 No No No
id

35

21 — 34 webkit

12

29

24 — 281

No

22

15 — 21 webkit

No
index

35

21 — 34 webkit

12

29

24 — 281

No

22

15 — 21 webkit

No
mapping

35

21 — 34 webkit

12

29

24 — 281

No

22

15 — 21 webkit

No
pose No15 Yes6 7 No No No
timestamp

35

21 — 34 webkit

12

29

24 — 281

No

22

15 — 21 webkit

No
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support No

35

25 — 34 webkit

Yes32

22

15 — 21 webkit

No Yes
Gamepad() constructor No35 Yes3222 No Yes
axes No

35

25 — 34 webkit

Yes32

22

15 — 21 webkit

No Yes
buttons No

35

25 — 34 webkit

Yes32

22

15 — 21 webkit

No Yes
connected No

35

25 — 34 webkit

Yes32

22

15 — 21 webkit

No Yes
displayId No Yes4 ? ? ? ? Yes
hand No No No No No No No
hapticActuators No No No No No No No
id No

35

25 — 34 webkit

Yes32 No No Yes
index No

35

25 — 34 webkit

Yes32 No No Yes
mapping No

35

25 — 34 webkit

Yes32

22

15 — 21 webkit

No Yes
pose No No No No No No No
timestamp No

35

25 — 34 webkit

Yes32

22

15 — 21 webkit

No Yes

1. From version 24 until version 28 (exclusive): this feature is behind the dom.gamepad.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.

2. Only works on desktop in an experimental version of Chrome (other builds won't return any devices when Navigator.getVRDisplays() is invoked).

3. This feature is behind the WebVR preference. To change preferences in Chrome, visit chrome://flags.

4. Currently supported only by Google Daydream.

5. Currently only Windows support is enabled by default. Mac support is available in Firefox Nightly.

6. The flag is enabled by default in Firefox Nightly and Beta, versions 55 and above.

7. This feature is behind the dom.gamepad-extensions.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.

另请参阅

文档标签和贡献者

此页面的贡献者: zsxeee, lixuanh
最后编辑者: zsxeee,