Start · Sprachen · JavaScript · Referenz · BatteryManager: chargingtimechange

BatteryManager: chargingtimechange

Ereignis

Wird ausgelöst, wenn sich die Eigenschaft <code>BatteryManager.chargingTime</code> ändert, also die geschätzte Zeit in Sekunden, bis der Akku voll geladen ist.

seit JavaScript Chromium-Browser (Chrome 38+, Edge 79+, Opera); ni Kategorie: webapi

Signatur

battery.addEventListener("chargingtimechange", handler)

Beschreibung

Das Ereignis chargingtimechange gehört zum Interface BatteryManager der Battery Status API. Es wird ausgelöst, wenn der Browser eine neue Schätzung für chargingTime meldet, also für die verbleibende Zeit in Sekunden, bis der Akku voll geladen ist. An ein BatteryManager-Objekt kommen Sie nur über das Promise von navigator.getBattery().

Sie können den Handler auf zwei Wegen registrieren: mit battery.addEventListener("chargingtimechange", handler) oder über die Eigenschaft battery.onchargingtimechange = handler. Übergeben wird ein einfaches Event ohne zusätzliche Daten. Den neuen Wert lesen Sie deshalb direkt aus event.target.chargingTime bzw. battery.chargingTime.

Das Ereignis eignet sich zum Beispiel für eine Anzeige wie „noch 25 Minuten bis voll geladen“ in Web-Apps, Kiosk-Anwendungen oder Dashboards. Beachten Sie: Wird das Gerät nicht geladen, ist chargingTime gleich Infinity. Ist der Akku voll oder das Gerät hat keinen Akku, ist der Wert 0. Wenn das Ladegerät ein- oder ausgesteckt wird, feuert meist zusätzlich chargingchange.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Der Name des Ereignisses: "chargingtimechange".
$handler Pflicht (event: Event) => void Callback, der bei jeder Änderung von chargingTime aufgerufen wird. event.target ist der BatteryManager.
$options boolean | AddEventListenerOptions false Optionale Listener-Optionen wie once oder signal (zum Abmelden über einen AbortController).

Rückgabewert

Typ
void
Beschreibung
addEventListener gibt nichts zurück. Der Handler erhält ein einfaches Event-Objekt.

Beispiele

Restladezeit mit addEventListener anzeigen

const formatTime = (seconds) => {
  if (seconds === Infinity) return 'Lädt nicht';
  if (seconds === 0) return 'Voll geladen';
  const min = Math.round(seconds / 60);
  return `Noch ca. ${min} Minuten bis voll`;
};

const init = async () => {
  if (!('getBattery' in navigator)) {
    console.log('Battery Status API nicht verfügbar');
    return;
  }
  const battery = await navigator.getBattery();
  console.log(formatTime(battery.chargingTime));

  battery.addEventListener('chargingtimechange', (event) => {
    console.log(formatTime(event.target.chargingTime));
  });
};

init();
Noch ca. 42 Minuten bis voll Noch ca. 38 Minuten bis voll

Handler über die on-Property setzen und wieder entfernen

const battery = await navigator.getBattery();

battery.onchargingtimechange = () => {
  console.log('Neue Ladezeit:', battery.chargingTime, 's');
};

// Später, z. B. beim Verlassen der Ansicht:
battery.onchargingtimechange = null;
Neue Ladezeit: 1800 s

Listener mit AbortController sauber abmelden

const controller = new AbortController();
const battery = await navigator.getBattery();

const onTimeChange = () => {
  document.querySelector('#ladezeit').textContent =
    battery.chargingTime === Infinity
      ? '–'
      : `${Math.ceil(battery.chargingTime / 60)} min`;
};

battery.addEventListener('chargingtimechange', onTimeChange, {
  signal: controller.signal
});

// Alternativ: battery.removeEventListener('chargingtimechange', onTimeChange);
setTimeout(() => controller.abort(), 60_000);

// Wichtig · Fallstricke

  • Browser-Unterstützung: Nur in Chromium-basierten Browsern verfügbar. Firefox hat die API aus Datenschutzgründen entfernt (ab Version 52), Safari hat sie nie unterstützt. Prüfen Sie deshalb immer mit 'getBattery' in navigator, ob sie vorhanden ist.
  • Nur in sicherem Kontext: navigator.getBattery() funktioniert nur über HTTPS. Außerdem kann die Permissions-Policy battery die API in iframes sperren.
  • Ungenaue Werte: chargingTime ist eine Schätzung. Sie kann springen oder dauerhaft Infinity bleiben, wenn das System keine Schätzung liefert. Auf Desktop-Rechnern ohne Akku ist der Wert 0.
  • Datenschutz: Akkudaten wurden in der Vergangenheit zum Fingerprinting (Wiedererkennen von Nutzern) missbraucht. Verlassen Sie sich nicht darauf, dass die API vorhanden ist.
  • Das Ereignis enthält keine eigenen Daten. Lesen Sie den Wert immer aus dem BatteryManager.