Signatur
Beschreibung
Die schreibgeschützte Eigenschaft value eines GamepadButton-Objekts gibt an, wie weit eine Taste gerade gedrückt ist. Der Wert ist eine Gleitkommazahl von 0.0 (nicht gedrückt) bis 1.0 (ganz durchgedrückt). Bei analogen Tasten wie den Schultertriggern (im Standard-Layout buttons[6] und buttons[7]) bekommt man damit auch Zwischenwerte, etwa für stufenloses Gasgeben oder Bremsen in einem Rennspiel.
Bei rein digitalen Tasten (z. B. A/B/X/Y oder dem Steuerkreuz) ist der Wert normalerweise nur 0 oder 1. Brauchen Sie nur „gedrückt oder nicht“, ist GamepadButton.pressed meist die bessere Wahl. Den Wert value nehmen Sie, wenn es auf die Intensität ankommt.
Die Gamepad API ist abfragebasiert: Der Browser löst keine Events aus, wenn sich value ändert. Sie lesen den Zustand deshalb in jedem Frame neu aus, üblicherweise in einer requestAnimationFrame-Schleife über navigator.getGamepads().
Rückgabewert
double) im Bereich 0.0 bis 1.0. Sie gibt an, wie weit die Taste gedrückt ist.Beispiele
Trigger-Wert einmalig auslesen
window.addEventListener('gamepadconnected', (event) => {
const gp = navigator.getGamepads()[event.gamepad.index];
// Rechter Trigger im Standard-Layout
const rt = gp.buttons[7];
console.log(`Rechter Trigger: ${rt.value.toFixed(2)}`);
});
Gas und Bremse in einer Spielschleife
let speed = 0;
const loop = () => {
const gp = navigator.getGamepads().find(Boolean);
if (gp) {
const gas = gp.buttons[7]?.value ?? 0; // RT
const brake = gp.buttons[6]?.value ?? 0; // LT
speed = Math.max(0, speed + gas * 0.5 - brake * 1.0);
document.title = `Tempo: ${speed.toFixed(1)}`;
}
requestAnimationFrame(loop);
};
window.addEventListener('gamepadconnected', () => requestAnimationFrame(loop), { once: true });
Tote Zone gegen Signalrauschen
const DEADZONE = 0.05;
const readTrigger = (button) => {
const v = button.value;
// Kleine Werte ignorieren, den Rest wieder auf 0..1 skalieren
return v < DEADZONE ? 0 : (v - DEADZONE) / (1 - DEADZONE);
};
const gp = navigator.getGamepads().find(Boolean);
if (gp) console.log(readTrigger(gp.buttons[7]));
// Wichtig · Fallstricke
- Kein Event bei Änderungen: Ändert sich
value, feuert kein Event. Fragen Sie den Zustand regelmäßig ab, zum Beispiel perrequestAnimationFrame. In Chrome ist das vongetGamepads()gelieferte Objekt ein Schnappschuss. Holen Sie es deshalb in jedem Frame neu, statt einen alten Verweis zu behalten. - Belegung der Tasten: Nur bei
gamepad.mapping === "standard"sind die Indizes festgelegt (6/7 = linker/rechter Trigger). Andere Controller können abweichen. - Digitale Tasten: Viele Tasten liefern nur
0oder1. Manche Treiber melden auch Trigger nur digital. - Rauschen: Abgenutzte Trigger melden in Ruhe manchmal leicht positive Werte. Eine tote Zone (Deadzone) hilft dagegen. Der Browser setzt
pressedteils schon ab einem eigenen Schwellwert. - Kompatibilität und Sicherheit: Die Gamepad API wird in allen modernen Browsern unterstützt. In aktuellen Browsern steht sie nur in sicheren Kontexten (HTTPS) zur Verfügung und kann per Permissions-Policy
gamepadgesperrt werden. Daten liefert sie erst, nachdem der Nutzer eine Taste gedrückt hat.