docs.rodeo

MDN Web Docs mirror

Element: wheel event

{{APIRef}} 

The wheel event fires when the user rotates a wheel button on a pointing device (typically a mouse). It is also fired for related devices that simulate wheel actions, such as trackpads and mouse balls.

This event replaces the non-standard deprecated {{domxref("Element/mousewheel_event", "mousewheel")}}  event.

Don’t confuse the wheel event with the {{domxref("Element/scroll_event", "scroll")}}  event:

Therefore, do not rely on the wheel event’s delta* properties to get the scrolling direction. Instead, detect value changes of {{domxref("Element.scrollLeft", "scrollLeft")}}  and {{domxref("Element.scrollTop", "scrollTop")}}  of the target in the scroll event.

The wheel event is cancelable. If the event is canceled, no scrolling or zooming is performed. This may cause performance issues as the browser has to wait for every wheel event to be processed before actually scrolling the content. You can avoid this by setting passive: true when calling {{domxref("EventTarget.addEventListener", "addEventListener()")}} , which may cause the browser to generate non-cancelable wheel events.

Syntax

Use the event name in methods like {{domxref("EventTarget.addEventListener", "addEventListener()")}} , or set an event handler property.

addEventListener("wheel", (event) => {});

onwheel = (event) => {};

Event type

A {{domxref("WheelEvent")}} . Inherits from {{domxref("MouseEvent")}} , {{domxref("UIEvent")}}  and {{domxref("Event")}} .

{{InheritanceDiagram("WheelEvent")}} 

Event properties

This interface inherits properties from its ancestors, {{DOMxRef("MouseEvent")}} , {{DOMxRef("UIEvent")}} , and {{DOMxRef("Event")}} .

Examples

Scaling an element via the wheel

This example shows how to scale an element using the mouse (or other pointing device) wheel.

<div>Scale me with your mouse wheel.</div>
body {
  min-height: 100vh;
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

div {
  width: 105px;
  height: 105px;
  background: #cdf;
  padding: 5px;
}
function zoom(event) {
  event.preventDefault();

  scale += event.deltaY * -0.01;

  // Restrict scale
  scale = Math.min(Math.max(0.125, scale), 4);

  // Apply scale transform
  el.style.transform = `scale(${scale})`;
}

let scale = 1;
const el = document.querySelector("div");
el.onwheel = zoom;

{{EmbedLiveSample("Scaling_an_element_via_the_wheel", 700, 300)}} 

addEventListener equivalent

The event handler can also be set up using the {{domxref("EventTarget/addEventListener", "addEventListener()")}}  method:

el.addEventListener("wheel", zoom, { passive: false });

Specifications

{{Specifications}} 

Browser compatibility

{{Compat}} 

See also

In this article

View on MDN