Signatur
Beschreibung
Die Eigenschaft MouseEvent.x ist ein Alias für MouseEvent.clientX. Sie liefert die horizontale Koordinate des Mauszeigers zum Zeitpunkt des Ereignisses, gemessen in CSS-Pixeln vom linken Rand des Viewports, also des sichtbaren Bereichs des Dokuments. Das Scrollen der Seite verändert den Wert nicht: Ein Klick ganz links im sichtbaren Bereich liefert immer ungefähr 0, egal wie weit die Seite gescrollt ist.
Ursprünglich stammt x aus dem alten Internet Explorer. Später wurde die Eigenschaft in die Spezifikation CSSOM View übernommen, damit sie zum Interface DOMRect passt, das ebenfalls x und y hat. So lässt sich die Mausposition direkt mit Werten aus getBoundingClientRect() vergleichen, denn beide beziehen sich auf den Viewport.
Weil MouseEvent die Basis für PointerEvent, WheelEvent und DragEvent ist, gibt es x auch bei diesen Ereignissen. Nutzen Sie die Eigenschaft, wenn Sie Elemente mit position: fixed am Zeiger ausrichten möchten, etwa für Tooltips oder Kontextmenüs, oder wenn Sie Treffer gegen Rechtecke aus getBoundingClientRect() prüfen. Für Koordinaten relativ zum gesamten Dokument verwenden Sie pageX, für Koordinaten relativ zum Zielelement offsetX.
Rückgabewert
clientX. Laut Spezifikation ist er ein double und kann daher Nachkommastellen haben, etwa bei Zoom oder hochauflösenden Displays. Die Eigenschaft ist schreibgeschützt.Beispiele
Mausposition beim Klick ausgeben
document.addEventListener('click', (event) => {
// x und clientX liefern denselben Wert
console.log(`x: ${event.x}, clientX: ${event.clientX}`);
console.log(event.x === event.clientX);
});
Tooltip mit position: fixed am Mauszeiger ausrichten
const tooltip = document.createElement('div');
tooltip.textContent = 'Hinweis';
Object.assign(tooltip.style, { position: 'fixed', pointerEvents: 'none' });
document.body.append(tooltip);
document.addEventListener('mousemove', ({ x, y }) => {
// Viewport-Koordinaten passen direkt zu position: fixed
tooltip.style.left = `${x + 12}px`;
tooltip.style.top = `${y + 12}px`;
});
Treffertest mit getBoundingClientRect()
const box = document.querySelector('#zielbereich');
document.addEventListener('pointerdown', (event) => {
const rect = box.getBoundingClientRect();
// Beide Werte beziehen sich auf den Viewport
const drinnen =
event.x >= rect.left && event.x <= rect.right &&
event.y >= rect.top && event.y <= rect.bottom;
console.log(drinnen ? 'Im Zielbereich' : 'Außerhalb');
});
Position relativ zum Element berechnen
const canvas = document.querySelector('canvas');
canvas.addEventListener('click', (event) => {
const rect = canvas.getBoundingClientRect();
const relX = event.x - rect.left;
console.log(`Klick bei ${relX.toFixed(1)} px vom linken Canvas-Rand`);
});
// Wichtig · Fallstricke
- Nur ein Alias:
xundclientXsind immer identisch. Für klaren, gut lesbaren Code giltclientXoft als eindeutiger, weil sofort erkennbar ist, auf welchen Bezugsrahmen sich der Wert bezieht. - Scrollen nicht vergessen:
xbezieht sich auf den Viewport, nicht auf das Dokument. Für Positionen relativ zum Dokument verwenden SiepageXbzw.clientX + window.scrollX. - Kompatibilität: In aktuellen Browsern wird
xüberall unterstützt. Firefox unterstützt es erst ab Version 63. Sehr alte Browser und manche nachgebildeten Ereignisobjekte, etwa in Testumgebungen wie älteren jsdom-Versionen, kennen es möglicherweise nicht. Nutzen Sie dortclientX. - Synthetische Ereignisse: Bei
new MouseEvent('click', { clientX: 50 })wirdxautomatisch auf50gesetzt. Eine eigene Initialisierungsoptionxgibt es nicht. - Touch:
TouchEventerbt nicht vonMouseEventund hat deshalb keinx. Verwenden Sieevent.touches[0].clientXoder gleich Pointer-Ereignisse. - Der Wert kann Nachkommastellen haben. Runden Sie ihn bei Bedarf mit
Math.round().