event.deltaY 的符号决定垂直滚动方向:正值表示向下滚动(内容上移),负值表示向上滚动(内容下移);应监听 wheel 事件而非已废弃的 mousewheel,注意 touchpad 快速滑动时需防抖或累积处理。

event.deltaY 是滚轮事件(wheel)中用于判断滚动方向的核心属性:它的符号(正负)直接对应垂直滚动方向。
deltaY 的正负含义
在绝大多数现代浏览器中:
- 向下滚动(页面内容向上移动)→ event.deltaY > 0
- 向上滚动(页面内容向下移动)→ event.deltaY
注意:这与“视觉上内容的移动方向”相反,但符合用户操作直觉——向下推滚轮,deltaY 为正;向上拨滚轮,deltaY 为负。
区分原生滚动和自定义行为
如果你只是想阻止默认滚动并做自己的逻辑,需先调用 event.preventDefault(),再读取 deltaY:
element.addEventListener('wheel', (event) => {
if (event.deltaY > 0) {
console.log('用户正在向下滚动');
// 例如:切换到下一页、播放下一帧
} else if (event.deltaY < 0) {
console.log('用户正在向上滚动');
// 例如:返回上一屏、回退动画
}
event.preventDefault(); // 阻止页面默认滚动(按需使用)
});
处理不同设备/系统差异
macOS 的触控板(尤其是启用了“自然滚动”时)和某些鼠标驱动可能影响 deltaY 符号逻辑。稳妥做法是:
- 不依赖绝对值大小,只用符号判断方向
- 避免硬编码阈值(如
Math.abs(event.deltaY) > 50),除非你明确需要过滤微小抖动 - 如需跨平台一致行为,可结合
event.deltaMode判断单位(0=像素,1=行,2=页),但方向仍由 deltaY 符号决定
常见误判场景与建议
以下情况容易导致方向误判:
-
监听了 mousewheel 而非 wheel 事件:mousewheel 已废弃,且其 detail 属性方向逻辑与 deltaY 不一致,应统一用
wheel - 未考虑水平滚动干扰:当用户横向滚动时,deltaY 可能为 0,此时应忽略或配合 deltaX 判断主滚动轴
- 在 touchpad 上快速滑动触发多次小量 delta:可累积短时间内的 deltaY 值再判断,或使用防抖逻辑,而非单次事件立即响应

















