The Gamepad interface of the Gamepad API defines an individual gamepad or other controller, allowing access to information such as button presses, axis positions, and id.
A Gamepad object can be returned in one of two ways: via the gamepad property of the gamepadconnected and gamepaddisconnected events, or by grabbing any position in the array returned by the Navigator.getGamepads() method.
Instance properties
Gamepad.axes Read only
-
An array representing the controls with axes present on the device (e.g. analog thumb sticks).
Gamepad.buttons Read only
-
An array of gamepadButton objects representing the buttons present on the device.
Gamepad.connected Read only
-
A boolean indicating whether the gamepad is still connected to the system.
Gamepad.displayId Read only Deprecated Non-standard
-
Returns the VRDisplay.displayId of an associated VRDisplay (if relevant) — the VRDisplay that the gamepad is controlling the displayed scene of.
Gamepad.hand Read only Experimental
-
An enum defining what hand the controller is being held in, or is most likely to be held in.
Gamepad.hapticActuators Read only Experimental
-
An array containing GamepadHapticActuator objects, each of which represents haptic feedback hardware available on the controller.
Gamepad.vibrationActuator Read only Non-standard
-
A GamepadHapticActuator object, which represents haptic feedback hardware available on the controller.
Gamepad.id Read only
-
A string containing identifying information about the controller.
Gamepad.index Read only
-
An integer that is auto-incremented to be unique for each device currently connected to the system.
Gamepad.mapping Read only
-
A string indicating whether the browser has remapped the controls on the device to a known layout.
Gamepad.pose Read only Experimental
-
A GamepadPose object representing the pose information associated with a WebVR controller (e.g. its position and orientation in 3D space).
Gamepad.timestamp Read only
-
A DOMHighResTimeStamp representing the last time the data for this gamepad was updated.
Example
window.addEventListener("gamepadconnected", (e) => {
console.log(
"Gamepad connected at index %d: %s. %d buttons, %d axes.",
e.gamepad.index,
e.gamepad.id,
e.gamepad.buttons.length,
e.gamepad.axes.length,
);
});
Specifications
Browser compatibility
|
Desktop |
Mobile |
|
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
WebView Android |
Chrome Android |
Firefox for Android |
Opera Android |
Safari on IOS |
Samsung Internet |
Gamepad |
21 |
12 |
29 |
No |
15 |
10.1 |
4.4 |
25 |
32 |
14 |
10.3 |
1.5 |
axes |
21 |
12 |
29 |
No |
15 |
10.1 |
4.4 |
25 |
32 |
14 |
10.3 |
1.5 |
buttons |
21 |
12 |
29 |
No |
15 |
10.1 |
4.4 |
25 |
32 |
14 |
10.3 |
1.5 |
connected |
25 |
12 |
29 |
No |
15 |
10.1 |
4.4 |
25 |
32 |
14 |
10.3 |
1.5 |
displayId |
No |
79–8015–79 |
98
64–98macOS support was enabled in Firefox 64.
55–98Windows support was enabled in Firefox 55.
|
No |
No |
No |
No |
55–80Currently supported only by Google Daydream.
|
55 |
42–57Currently supported only by Google Daydream.
|
No |
6.0–13.0Currently supported only by Google Daydream.
|
hand |
No |
15–79 |
55 |
No |
No |
No |
No |
No |
55 |
No |
No |
No |
hapticActuators |
No |
15–79 |
55 |
No |
No |
No |
No |
No |
55 |
No |
No |
No |
id |
21 |
12 |
29 |
No |
15 |
10.1 |
4.4 |
25 |
32 |
14 |
10.3 |
1.5 |
index |
21 |
12 |
29 |
No |
15 |
10.1 |
4.4 |
25 |
32 |
14 |
10.3 |
1.5 |
mapping |
21 |
12 |
29 |
No |
15 |
10.1 |
4.4 |
25 |
32 |
14 |
10.3 |
1.5 |
pose |
No |
15–79 |
55 |
No |
No |
No |
No |
No |
55 |
No |
No |
No |
secure_context_required |
86 |
86 |
91 |
No |
72 |
No |
No |
86 |
91 |
No |
No |
No |
timestamp |
21 |
12 |
29 |
No |
15 |
10.1 |
4.4 |
25 |
32 |
14 |
10.3 |
1.5 |
vibrationActuator |
68 |
79 |
No |
No |
55 |
16.4 |
No |
68 |
No |
48 |
16.4 |
10.0 |
See also