Signatur
Beschreibung
MouseEvent.screenY gibt die vertikale Koordinate des Mauszeigers relativ zur oberen Kante des gesamten Bildschirms bzw. des virtuellen Desktops zurück. Anders als bei clientY (relativ zum Viewport) oder pageY (relativ zum Dokument) spielen Scrollposition, Fensterposition und Browser-Oberfläche keine Rolle. Der Wert gilt für den Zeitpunkt, an dem das Ereignis ausgelöst wurde.
Die Eigenschaft ist dann nützlich, wenn eine Position fensterübergreifend gebraucht wird, z. B. um ein Popup mit window.open() an der Klickstelle zu öffnen, Positionen zwischen mehreren Fenstern abzugleichen oder zusammen mit window.screenY und screen.availHeight zu rechnen. Für die Positionierung von Elementen innerhalb der Seite sind clientY, pageY oder offsetY fast immer die bessere Wahl.
Weil PointerEvent, WheelEvent und DragEvent von MouseEvent erben, gibt es screenY auch dort. Der Wert ist ein double in CSS-Pixeln. Ältere Spezifikationen haben ihn als ganze Zahl (long) definiert, deshalb liefern manche Browser Nachkommastellen, andere nicht.
Rückgabewert
screen.height.Beispiele
Koordinatensysteme vergleichen
document.addEventListener('click', (event) => {
console.log(`screenY: ${event.screenY}`); // relativ zum Bildschirm
console.log(`clientY: ${event.clientY}`); // relativ zum Viewport
console.log(`pageY: ${event.pageY}`); // relativ zum Dokument
});
Popup an der Klickposition öffnen
const button = document.querySelector('#hilfe');
button.addEventListener('click', (event) => {
const breite = 320;
const hoehe = 240;
// screenX/screenY passen direkt zu den Fensterkoordinaten von window.open
const links = Math.round(event.screenX);
const oben = Math.round(event.screenY);
window.open(
'/hilfe.html',
'hilfe',
`width=${breite},height=${hoehe},left=${links},top=${oben}`
);
});
Vertikale Ziehstrecke unabhängig vom Scrollen messen
let startY = null;
const onMove = (event) => {
const delta = event.screenY - startY;
console.log(`Gezogen: ${delta.toFixed(1)} px`);
};
const onUp = () => {
document.removeEventListener('pointermove', onMove);
document.removeEventListener('pointerup', onUp);
startY = null;
};
document.addEventListener('pointerdown', (event) => {
startY = event.screenY;
document.addEventListener('pointermove', onMove);
document.addEventListener('pointerup', onUp);
});
// Wichtig · Fallstricke
- Mehrere Monitore: Liegt ein Monitor über dem Hauptbildschirm, sind negative Werte möglich. Außerdem kann
screenYgrößer alsscreen.heightsein. Den Wertebereich also nicht als begrenzt annehmen. - Zoom und Gerätepixel: Der Wert ist in CSS-Pixeln angegeben, nicht in physischen Pixeln. Bei Seitenzoom oder hohem
devicePixelRatioweicht er von den Pixeln des Betriebssystems ab. - Datenschutz: Browser wie Firefox (mit
privacy.resistFingerprinting) oder Tor verfälschen oder runden Bildschirmkoordinaten absichtlich, um Fingerprinting zu erschweren. Die Werte sollten deshalb nicht für sicherheitsrelevante Logik verwendet werden. - Synthetische Ereignisse: Bei
new MouseEvent('click')ohne passendes Init-Objekt istscreenYgleich0. Setzen lässt sich der Wert nur über{ screenY: … }im Konstruktor, denn die Eigenschaft ist schreibgeschützt. - Touch: Bei aus Touch-Eingaben abgeleiteten Mausereignissen und bei
Touch.screenYkann der Wert je nach Browser abweichen. Für einheitliches Verhalten besserPointerEventverwenden. - Wird von allen gängigen Browsern seit Jahren unterstützt. Nachkommastellen (
double) liefern nur neuere Engines.