此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

Element:wheel 事件

有限可用

此特性不属于基线,因为它尚未在主流浏览器中得到支持。

Want more browser support for this feature? Tell us why.

wheel 事件在用户旋转定点设备(通常是鼠标)上的滚轮按钮时触发。对于模拟滚轮操作的类似设备(例如触控板和滚球鼠标)也会触发该事件。

该事件取代了已被弃用的非标准 mousewheel 事件。

不要将 wheel 事件与 scroll 事件混淆:

  • wheel 事件不一定会触发 scroll 事件。例如,元素可能根本无法滚动。使用滚轮或触控板进行缩放操作时也会触发 wheel 事件(其中 ctrlKeytrue)。
  • scroll 事件不一定是 wheel 事件触发的。元素也可以通过键盘、拖动滚动条或使用 JavaScript 来滚动。
  • 即使 wheel 事件确实触发了滚动,wheel 事件中的 delta* 值也不一定反映内容的滚动方向。

因此,请不要依赖 wheel 事件的 delta* 属性来获得滚动方向。请改为在 scroll 事件中检测目标元素 scrollLeftscrollTop 值的变化。

wheel 事件是可取消的。在某些浏览器中,只有序列中的第一个 wheel 事件是可取消的,后续事件不可取消。如果事件被取消,则不会执行滚动或缩放。这可能会导致性能问题,因为浏览器必须等待每个 wheel 事件处理完毕后才能实际滚动内容。可以通过在调用 addEventListener() 时设置 passive: true 来避免这种情况,这可能会使浏览器生成不可取消的 wheel 事件。

语法

在类似 addEventListener() 的方法中使用事件名称,或设置事件处理器属性。

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

onwheel = (event) => { }

事件类型

一个 WheelEvent。继承自 MouseEventUIEventEvent

Event UIEvent MouseEvent WheelEvent

示例

通过滚轮缩放元素

此示例展示了如何使用鼠标(或其他定点设备)滚轮缩放元素。

html
<div>使用鼠标滚轮来进行缩放</div>
css
body {
  min-height: 100vh;
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

div {
  width: 105px;
  height: 105px;
  background: #ccddff;
  padding: 5px;
}
js
let scale = 1;
const el = document.querySelector("div");

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})`;
}

el.onwheel = zoom;

使用 addEventListener 的等价形式

上面的事件处理器也可以通过 addEventListener() 方法来设置:

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

规范

规范
Pointer Events
# wheel
HTML
# handler-onwheel

浏览器兼容性

参见