Start · Sprachen · JavaScript · Referenz · MouseEvent.screenX

MouseEvent.screenX

Eigenschaft

Liefert die horizontale Position des Mauszeigers in Bildschirmkoordinaten, gemessen vom linken Rand des gesamten (virtuellen) Bildschirms.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

MouseEvent.screenX

Beschreibung

Die schreibgeschützte Eigenschaft screenX gibt die X-Koordinate des Mauszeigers zum Zeitpunkt des Ereignisses zurück, und zwar relativ zum Bildschirm, nicht relativ zum Browserfenster oder zum Dokument. Der Wert ist in CSS-Pixeln angegeben und seit der Spezifikation CSSOM View ein double. Nachkommastellen sind also möglich.

Bei mehreren Monitoren bezieht sich der Wert auf den gesamten virtuellen Desktop. Deshalb kann er auch negativ sein, etwa wenn ein zweiter Monitor links vom Hauptbildschirm steht. Praktisch ist screenX vor allem, wenn Positionen fensterübergreifend verglichen werden sollen, zum Beispiel beim Platzieren von Popup-Fenstern mit window.open() oder beim Ziehen zwischen mehreren Fenstern.

Für die meisten Aufgaben im Layout passen andere Koordinaten besser: clientX (relativ zum sichtbaren Viewport), pageX (relativ zum Dokument, Scrollen eingerechnet) oder offsetX (relativ zum Zielelement). screenX ist auch bei PointerEvent, WheelEvent und DragEvent verfügbar, weil diese von MouseEvent erben. Bei synthetischen Ereignissen lässt sich der Wert über das Initialisierungsobjekt des Konstruktors new MouseEvent() setzen.

Rückgabewert

Typ
number
Beschreibung
Horizontale Koordinate des Mauszeigers in CSS-Pixeln relativ zum linken Rand des (virtuellen) Bildschirms. Kann bei mehreren Monitoren negativ sein und Nachkommastellen enthalten.

Beispiele

Koordinaten beim Klick vergleichen

document.addEventListener('click', (event) => {
  console.log(`screenX: ${event.screenX}`);
  console.log(`clientX: ${event.clientX}`);
  console.log(`pageX:   ${event.pageX}`);
});
screenX: 812 clientX: 412 pageX: 412

Popup-Fenster an der Mausposition öffnen

const button = document.querySelector('#hilfe');

button.addEventListener('click', (event) => {
  const breite = 320;
  const hoehe = 240;
  // Popup rechts unterhalb des Zeigers platzieren
  const left = Math.round(event.screenX + 10);
  const top = Math.round(event.screenY + 10);
  window.open(
    '/hilfe.html',
    'hilfe',
    `width=${breite},height=${hoehe},left=${left},top=${top}`
  );
});

Horizontale Zugstrecke unabhängig vom Scrollen messen

let startX = null;

const griff = document.querySelector('.griff');

griff.addEventListener('pointerdown', (event) => {
  startX = event.screenX;
  griff.setPointerCapture(event.pointerId);
});

griff.addEventListener('pointermove', (event) => {
  if (startX === null) return;
  const delta = event.screenX - startX;
  griff.style.transform = `translateX(${delta}px)`;
});

griff.addEventListener('pointerup', () => {
  startX = null;
});

Synthetisches Ereignis mit screenX erzeugen

const ereignis = new MouseEvent('click', {
  screenX: 150,
  screenY: 90,
  clientX: 50,
  clientY: 30,
  bubbles: true
});

document.body.addEventListener('click', (e) => {
  console.log(e.screenX, e.isTrusted);
}, { once: true });

document.body.dispatchEvent(ereignis);
150 false

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie event.screenX = 10 hat keine Wirkung. Werte für synthetische Ereignisse setzt man über den Konstruktor new MouseEvent(type, { screenX }).
  • Negative Werte: Bei mehreren Monitoren kann screenX kleiner als 0 sein. Code, der nur positive Werte erwartet, kann dann Fehler verursachen.
  • Nicht fürs Layout geeignet: Zum Positionieren von Elementen im Dokument nimmt man clientX oder pageX. screenX hängt von der Fensterposition ab.
  • Datenschutz: Manche Browser oder Anti-Fingerprinting-Modi (z. B. resistFingerprinting in Firefox) können die Bildschirmkoordinaten verfälschen oder auf Fensterkoordinaten reduzieren. Außerdem gibt es in Browsern mit Wayland Einschränkungen.
  • Typ: Ältere Spezifikationen nannten long als Typ, aktuelle Browser liefern teils Gleitkommazahlen. Für Fensterpositionen in window.open() sollte man daher runden.
  • Kompatibilität: Wird von allen gängigen Browsern seit Langem unterstützt. Bei Touch-Ereignissen stehen die Werte stattdessen auf den einzelnen Touch-Objekten (touch.screenX).