Signatur
Beschreibung
deltaZ gibt an, wie weit ein Eingabegerät entlang der z-Achse „gescrollt“ hat. Das ist die Achse senkrecht zur Bildschirmebene. Sie entspricht also einer Bewegung zum Betrachter hin oder von ihm weg. Die Eigenschaft gehört zum wheel-Ereignis, zusammen mit deltaX (horizontal) und deltaY (vertikal).
Mit normalen Mausrädern und Touchpads ist deltaZ praktisch immer 0. Werte ungleich null kommen nur von speziellen Geräten, etwa 3D-Mäusen (z. B. SpaceMouse), manchen Joysticks oder Grafiktabletts mit Zusatzachse. Das gilt auch nur, wenn Betriebssystem und Browser diese Achse weitergeben.
Die Einheit des Werts steht in deltaMode: 0 (DOM_DELTA_PIXEL) für Pixel, 1 (DOM_DELTA_LINE) für Zeilen und 2 (DOM_DELTA_PAGE) für Seiten. Positive Werte bedeuten meist eine Bewegung vom Nutzer weg, negative eine Bewegung zum Nutzer hin. Die genaue Richtung hängt aber vom Gerät ab.
Einsetzen kann man deltaZ zum Beispiel für 3D-Szenen (WebGL/Three.js), Zoom-Steuerungen oder CAD-Viewer. Dort liefert man damit eine zusätzliche Achse, falls das Gerät sie bereitstellt. Nutzer ohne ein solches Gerät brauchen immer eine Alternative, z. B. deltaY mit gedrückter Strg-Taste.
Rückgabewert
double) mit der Scrollmenge entlang der z-Achse in der Einheit von deltaMode. Bei gewöhnlichen Mäusen und Touchpads ist der Wert 0.Beispiele
deltaZ im wheel-Ereignis auslesen
const box = document.querySelector('#viewer');
box.addEventListener('wheel', (event) => {
const modes = ['Pixel', 'Zeilen', 'Seiten'];
console.log(`x=${event.deltaX}, y=${event.deltaY}, z=${event.deltaZ} (${modes[event.deltaMode]})`);
});
3D-Kamera zoomen, mit Ersatz über Strg + Mausrad
const canvas = document.querySelector('canvas');
let cameraZ = 10;
// Zeilen/Seiten in Pixel umrechnen
const toPixels = (delta, mode) =>
mode === WheelEvent.DOM_DELTA_LINE ? delta * 16 :
mode === WheelEvent.DOM_DELTA_PAGE ? delta * window.innerHeight :
delta;
canvas.addEventListener('wheel', (event) => {
// z-Achse bevorzugen, sonst Strg + vertikales Scrollen
let dz = event.deltaZ;
if (dz === 0 && event.ctrlKey) dz = event.deltaY;
if (dz === 0) return;
event.preventDefault();
cameraZ = Math.min(100, Math.max(1, cameraZ + toPixels(dz, event.deltaMode) * 0.01));
console.log('Kamera-Z:', cameraZ.toFixed(2));
}, { passive: false });
Synthetisches WheelEvent mit deltaZ (z. B. für Tests)
const target = document.body;
target.addEventListener('wheel', (e) => {
console.log('deltaZ:', e.deltaZ, 'Modus:', e.deltaMode);
}, { once: true });
target.dispatchEvent(new WheelEvent('wheel', {
deltaZ: -3,
deltaMode: WheelEvent.DOM_DELTA_LINE,
bubbles: true,
cancelable: true
}));
// Wichtig · Fallstricke
- Fast immer 0: Übliche Mäuse und Touchpads haben keine z-Achse. Baue deshalb keine Funktion, die nur über
deltaZbedienbar ist, sondern biete immer eine Alternative an (z. B.deltaYmitctrlKey). - Einheit prüfen: Der Wert ist nur zusammen mit
deltaModesinnvoll. Firefox meldet beim Mausrad oftDOM_DELTA_LINE, Chromium meistDOM_DELTA_PIXEL. - Nur lesbar: Eine Zuweisung an
event.deltaZwird ignoriert. Eigene Werte lassen sich nur über denWheelEvent-Konstruktor setzen. - Passive Listener: Chrome behandelt
wheel-Listener aufwindow,documentundbodystandardmäßig als passiv. Wenn dupreventDefault()aufrufen willst, musst du{ passive: false }angeben. - Kompatibilität: Wird von allen modernen Browsern unterstützt. Das veraltete Ereignis
mousewheelund die EigenschaftwheelDeltahaben keine z-Achse.