Start · Sprachen · JavaScript · Referenz · new WheelEvent()

new WheelEvent()

Methode

Der Konstruktor <code>WheelEvent()</code> erzeugt ein neues, synthetisches <code>WheelEvent</code>-Objekt, das sich mit <code>dispatchEvent()</code> auslösen lässt.

seit JavaScript Baseline: alle modernen Browser (DOM Level 3 Event Kategorie: webapi

Signatur

new WheelEvent(type, options)

Beschreibung

Mit new WheelEvent() erzeugst du selbst ein Ereignis, das wie eine Bewegung des Mausrads oder eine Scroll-Geste auf dem Touchpad aussieht. WheelEvent erbt von MouseEvent, UIEvent und Event. Im options-Objekt kannst du deshalb neben den Rad-Werten (deltaX, deltaY, deltaZ, deltaMode) auch alle Maus-Eigenschaften wie clientX, ctrlKey oder buttons und die allgemeinen Event-Optionen wie bubbles und cancelable angeben.

Typische Einsatzfälle sind automatisierte Tests, etwa für Zoom-Funktionen in Kartenansichten, Canvas-Editoren oder eigene Scroll-Container, und das Weiterleiten von Rad-Eingaben an ein anderes Element. Das erzeugte Ereignis gibst du mit element.dispatchEvent(event) aus. Dabei laufen die registrierten wheel-Listener ab.

Wichtig: Ein selbst erzeugtes Ereignis ist nicht vertrauenswürdig (event.isTrusted === false). Der Browser führt deshalb kein echtes Scrollen oder Zoomen aus. Es reagiert nur dein eigener JavaScript-Code darauf.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, auf das Groß- und Kleinschreibung achtet. In der Praxis fast immer "wheel".
$options WheelEventInit {} Optionales Konfigurationsobjekt. Zusätzlich zu allen Feldern von MouseEventInit (z. B. clientX, clientY, ctrlKey, shiftKey, buttons) und EventInit (bubbles, cancelable, composed) gibt es folgende Felder:
  • deltaX (number, Standard 0): Scroll-Betrag auf der horizontalen Achse
  • deltaY (number, Standard 0): Scroll-Betrag auf der vertikalen Achse, positive Werte bedeuten nach unten
  • deltaZ (number, Standard 0): Scroll-Betrag auf der Z-Achse
  • deltaMode (number, Standard 0): Einheit der Delta-Werte: WheelEvent.DOM_DELTA_PIXEL (0), DOM_DELTA_LINE (1) oder DOM_DELTA_PAGE (2)

Rückgabewert

Typ
WheelEvent
Beschreibung
Ein neues WheelEvent-Objekt mit den angegebenen Eigenschaften. Nicht angegebene Felder erhalten ihren Standardwert.

Beispiele

Einfaches WheelEvent erzeugen und auslesen

const event = new WheelEvent('wheel', {
  deltaY: 120,
  deltaMode: WheelEvent.DOM_DELTA_PIXEL,
  bubbles: true,
  cancelable: true
});

console.log(event.type, event.deltaY, event.deltaMode, event.isTrusted);
wheel 120 0 false

Zoom-Handler mit Strg+Mausrad im Test auslösen

const canvas = document.createElement('canvas');
document.body.append(canvas);
let zoom = 1;

canvas.addEventListener('wheel', (e) => {
  if (!e.ctrlKey) return;
  e.preventDefault();
  // Negatives deltaY = hineinzoomen
  zoom *= e.deltaY < 0 ? 1.1 : 0.9;
  console.log('Zoom:', zoom.toFixed(2));
}, { passive: false });

// Simulierter Zoom-Schritt nach innen an Position (100, 50)
canvas.dispatchEvent(new WheelEvent('wheel', {
  deltaY: -100,
  ctrlKey: true,
  clientX: 100,
  clientY: 50,
  bubbles: true,
  cancelable: true
}));
Zoom: 1.10

Rad-Eingaben von einem Overlay an einen Scroll-Container weiterleiten

const overlay = document.querySelector('#overlay');
const list = document.querySelector('#list');

list.addEventListener('wheel', (e) => {
  // Synthetische Events scrollen nicht von selbst – daher manuell
  if (!e.isTrusted) list.scrollBy(e.deltaX, e.deltaY);
});

overlay.addEventListener('wheel', (e) => {
  e.preventDefault();
  list.dispatchEvent(new WheelEvent('wheel', {
    deltaX: e.deltaX,
    deltaY: e.deltaY,
    deltaMode: e.deltaMode,
    clientX: e.clientX,
    clientY: e.clientY
  }));
}, { passive: false });

// Wichtig · Fallstricke

  • Kein Standardverhalten: Ereignisse, die du mit dispatchEvent() auslöst, haben isTrusted === false. Der Browser scrollt oder zoomt dabei nicht. Das musst du bei Bedarf selbst erledigen, z. B. mit scrollBy().
  • bubbles und cancelable sind standardmäßig false. Echte wheel-Ereignisse steigen dagegen im DOM auf und lassen sich abbrechen. Setze beide Optionen daher ausdrücklich, wenn Listener an Elternelementen reagieren oder preventDefault() wirken soll.
  • deltaMode beachten: Echte Ereignisse können je nach Browser und Betriebssystem in Zeilen (DOM_DELTA_LINE) statt in Pixeln geliefert werden. Das betrifft vor allem Firefox mit einem klassischen Mausrad. Robuster Code rechnet die Werte deshalb passend um.
  • Passive Listener: Browser registrieren wheel-Listener an window, document und body standardmäßig als passiv. Dort wird preventDefault() ignoriert, solange du nicht { passive: false } angibst.
  • Verwende nicht das veraltete Ereignis mousewheel und nicht initWheelEvent(). Der Konstruktor ist der Standardweg.
  • Kompatibilität: Der Konstruktor wird in allen modernen Browsern unterstützt. Internet Explorer unterstützt ihn nicht.