Signatur
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
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();
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;
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-Policybatterydie API in iframes sperren. - Ungenaue Werte:
chargingTimeist eine Schätzung. Sie kann springen oder dauerhaftInfinitybleiben, wenn das System keine Schätzung liefert. Auf Desktop-Rechnern ohne Akku ist der Wert0. - 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.