Start · Sprachen · JavaScript · Referenz · Magnetometer.y

Magnetometer.y

Eigenschaft

Schreibgeschützte Eigenschaft, die die Stärke des Magnetfelds entlang der y-Achse des Geräts in Mikrotesla (µT) als <code>number</code> liefert.

seit JavaScript Experimentell: Chromium-Browser hinter Flag (Gener Kategorie: webapi

Signatur

Magnetometer.y

Beschreibung

Die schreibgeschützte Eigenschaft y der Schnittstelle Magnetometer gibt die zuletzt gemessene Stärke des Magnetfelds entlang der y-Achse des Geräts zurück. Der Wert wird in Mikrotesla (µT) angegeben. Bei einem Smartphone im Hochformat zeigt die y-Achse in der Regel zum oberen Bildschirmrand.

Zusammen mit Magnetometer.x und Magnetometer.z ergibt sich ein dreidimensionaler Feldvektor. Damit lassen sich z. B. Kompass-Anwendungen, Metalldetektoren oder Magnet-Gesten umsetzen. Für eine Himmelsrichtung wird der Winkel meist aus x und y berechnet (Math.atan2(y, x)), sofern das Gerät flach liegt.

Solange der Sensor nicht über start() aktiviert wurde oder noch keine Messung vorliegt, ist der Wert null. Neue Werte liest man am besten im reading-Event aus, das bei jeder neuen Messung ausgelöst wird. Die Achsen beziehen sich standardmäßig auf das Gerät; über die Option referenceFrame: "screen" im Konstruktor kann man sie an der Bildschirmausrichtung ausrichten.

Rückgabewert

Typ
number | null
Beschreibung
Magnetfeldstärke entlang der y-Achse in Mikrotesla (µT) oder null, wenn noch keine Messung vorliegt.

Beispiele

y-Wert bei jeder Messung ausgeben

if ('Magnetometer' in window) {
  const sensor = new Magnetometer({ frequency: 10 });

  sensor.addEventListener('reading', () => {
    console.log(`Magnetfeld Y: ${sensor.y.toFixed(2)} µT`);
  });

  sensor.addEventListener('error', (event) => {
    console.error('Sensorfehler:', event.error.name, event.error.message);
  });

  sensor.start();
} else {
  console.warn('Magnetometer wird nicht unterstützt.');
}
Magnetfeld Y: -21.37 µT Magnetfeld Y: -21.42 µT

Einfacher Kompass aus x und y

const sensor = new Magnetometer({ frequency: 5, referenceFrame: 'screen' });

sensor.onreading = () => {
  const { x, y } = sensor;
  // Winkel in Grad, auf 0–360 normalisiert (Gerät flach liegend)
  let heading = Math.atan2(y, x) * (180 / Math.PI);
  heading = (heading + 360) % 360;
  console.log(`Richtung: ${Math.round(heading)}°`);
};

sensor.start();
Richtung: 274°

Berechtigung prüfen und Magnet in der Nähe erkennen

const startDetector = async () => {
  const { state } = await navigator.permissions.query({ name: 'magnetometer' });
  if (state === 'denied') {
    console.warn('Zugriff auf Magnetometer verweigert.');
    return;
  }

  const sensor = new Magnetometer({ frequency: 20 });
  sensor.addEventListener('reading', () => {
    const staerke = Math.hypot(sensor.x, sensor.y, sensor.z);
    if (staerke > 200) {
      console.log(`Starkes Feld! y = ${sensor.y.toFixed(1)} µT`);
    }
  });
  sensor.start();
};

startDetector();
Starkes Feld! y = 187.4 µT

// Wichtig · Fallstricke

  • Experimentell: Das Magnetometer ist nur in Chromium-basierten Browsern verfügbar und dort meist hinter dem Flag #enable-generic-sensor-extra-classes. Firefox und Safari unterstützen es nicht – immer mit 'Magnetometer' in window prüfen.
  • Erfordert einen sicheren Kontext (HTTPS) und kann per Permissions-Policy: magnetometer für Iframes gesperrt sein. Fehler wie NotAllowedError oder NotReadableError treten im error-Event auf.
  • Vor dem ersten reading-Event ist y null – Zugriff auf toFixed() o. Ä. vorher führt zu einem TypeError.
  • Die Rohwerte sind unkalibriert gegenüber Störungen durch Metall oder Elektronik in der Nähe; das Erdmagnetfeld liegt typischerweise nur bei 25–65 µT. Für eine präzise Ausrichtung ist oft AbsoluteOrientationSensor die bessere Wahl.
  • Hohe Frequenzen erhöhen den Akkuverbrauch – Sensor mit stop() beenden, wenn er nicht gebraucht wird.