Start · Sprachen · JavaScript · Referenz · GamepadButton.value

GamepadButton.value

Eigenschaft

Liefert als <code>double</code> zwischen <code>0.0</code> und <code>1.0</code>, wie stark eine Taste des Gamepads gerade gedrückt ist – besonders nützlich bei analogen Triggern.

seit JavaScript Baseline: alle modernen Browser (Gamepad API) Kategorie: webapi

Signatur

GamepadButton.value

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

Typ
number
Beschreibung
Eine Gleitkommazahl (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)}`);
});
Rechter Trigger: 0.00

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 per requestAnimationFrame. In Chrome ist das von getGamepads() 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 0 oder 1. 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 pressed teils 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 gamepad gesperrt werden. Daten liefert sie erst, nachdem der Nutzer eine Taste gedrückt hat.