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