Signatur
Beschreibung
stop() ist eine Methode der abstrakten Basisschnittstelle Sensor. Alle konkreten Sensoren erben sie, etwa Accelerometer, Gyroscope, Magnetometer, AbsoluteOrientationSensor, RelativeOrientationSensor, AmbientLightSensor und GravitySensor. Der Aufruf deaktiviert den Sensor: Danach werden keine reading-Events mehr ausgelöst, und activated ist wieder false.
Rufe stop() auf, sobald du keine Messwerte mehr brauchst, zum Beispiel wenn der Nutzer eine Ansicht verlässt, eine Messung beendet ist oder die Seite in den Hintergrund wechselt. Ein laufender Hardware-Sensor verbraucht Akku. Konsequentes Stoppen spart also Energie und Rechenzeit.
Die Methode arbeitet synchron und nimmt keine Argumente. Nach dem Stopp werden die Messwert-Eigenschaften wie x, y, z oder illuminance sowie timestamp auf null zurückgesetzt. Mit start() lässt sich derselbe Sensor jederzeit wieder aktivieren. Du musst dafür keine neue Instanz erzeugen.
Beispiele
Beschleunigungssensor nach 5 Sekunden stoppen
const sensor = new Accelerometer({ frequency: 30 });
sensor.addEventListener('reading', () => {
console.log(`x=${sensor.x.toFixed(2)} y=${sensor.y.toFixed(2)} z=${sensor.z.toFixed(2)}`);
});
sensor.addEventListener('error', (event) => {
console.error(event.error.name, event.error.message);
});
sensor.start();
// Messung nach 5 Sekunden beenden
setTimeout(() => {
sensor.stop();
console.log('Aktiv:', sensor.activated, '| x:', sensor.x);
}, 5000);
Sensor bei Tab-Wechsel pausieren und fortsetzen
const gyro = new Gyroscope({ frequency: 60 });
gyro.addEventListener('reading', () => {
// z. B. eine 3D-Szene drehen
console.log(gyro.x, gyro.y, gyro.z);
});
gyro.start();
// Akku sparen: Im Hintergrund keine Messwerte erfassen
document.addEventListener('visibilitychange', () => {
if (document.hidden) {
gyro.stop();
} else {
gyro.start();
}
});
Start/Stopp-Schalter mit Berechtigungsprüfung
const button = document.querySelector('#toggle');
let sensor = null;
const toggleSensor = async () => {
if (sensor?.activated) {
sensor.stop();
button.textContent = 'Messung starten';
return;
}
const { state } = await navigator.permissions.query({ name: 'ambient-light-sensor' });
if (state === 'denied') {
console.warn('Zugriff auf den Lichtsensor verweigert');
return;
}
sensor ??= new AmbientLightSensor();
sensor.onreading = () => console.log(`${sensor.illuminance} lx`);
sensor.onerror = (e) => console.error(e.error.name);
sensor.start();
button.textContent = 'Messung stoppen';
};
button.addEventListener('click', toggleSensor);
// Wichtig · Fallstricke
- Browser-Unterstützung: Die Generic Sensor API gibt es nur in Chromium-Browsern. Firefox und Safari unterstützen sie nicht. Prüfe deshalb vorher, ob die Schnittstelle existiert, etwa mit
'Accelerometer' in window. Einige Sensoren wieAmbientLightSensormüssen zusätzlich per Flag aktiviert werden. - Sicherer Kontext: Die API funktioniert nur über HTTPS. Außerdem kann eine Permissions-Policy den Zugriff sperren, zum Beispiel
accelerometer,gyroscopeodermagnetometer. In iframes ist dann das Attributallownötig. - Messwerte nach dem Stopp: Nach
stop()sind die Messwert-Eigenschaftennull. Wer den letzten Wert behalten will, muss ihn vorher selbst speichern, etwa imreading-Handler. - Mehrfachaufruf: Ein erneuter Aufruf von
stop()auf einem bereits gestoppten Sensor ist wirkungslos und wirft keinen Fehler. - Automatisches Pausieren: Browser können Sensoren in Hintergrund-Tabs selbst pausieren. Trotzdem ist ein explizites
stop()guter Stil, weil es Ressourcen verlässlich freigibt.