Skip to content

Instantly share code, notes, and snippets.

@easierbycode
Created June 2, 2025 22:24
Show Gist options
  • Save easierbycode/3bf8114291f6e022ebf7d6718545ff86 to your computer and use it in GitHub Desktop.
Save easierbycode/3bf8114291f6e022ebf7d6718545ff86 to your computer and use it in GitHub Desktop.
gamepad-logger.js
let prevButtonStates = [];
let fullscreenToggled = false; // Flag to ensure fullscreen is toggled only once
window.addEventListener("gamepadconnected", (e) => {
console.log(`Gamepad ${e.gamepad.index} connected`);
prevButtonStates[e.gamepad.index] = [];
requestAnimationFrame(pollGamepads);
});
function pollGamepads() {
const gamepads = navigator.getGamepads();
for (let i = 0; i < gamepads.length; i++) {
const gp = gamepads[i];
if (!gp) continue;
if (!prevButtonStates[gp.index]) prevButtonStates[gp.index] = [];
gp.buttons.forEach((btn, idx) => {
const prev = prevButtonStates[gp.index][idx] || false;
if (btn.pressed && !prev) {
console.log(`Gamepad ${gp.index} button ${idx} pressed`);
if (!fullscreenToggled) {
if (document.documentElement.requestFullscreen) {
document.documentElement.requestFullscreen();
} else if (document.documentElement.mozRequestFullScreen) { // Firefox
document.documentElement.mozRequestFullScreen();
} else if (document.documentElement.webkitRequestFullscreen) { // Chrome, Safari and Opera
document.documentElement.webkitRequestFullscreen();
} else if (document.documentElement.msRequestFullscreen) { // IE/Edge
document.documentElement.msRequestFullscreen();
}
fullscreenToggled = true;
console.log("Fullscreen toggled on first button press.");
}
}
prevButtonStates[gp.index][idx] = btn.pressed;
});
}
requestAnimationFrame(pollGamepads);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment