javascript 中通过 wheel 事件的 deltay 判断滚动方向:deltay 0 为向下;deltax 用于水平滚动;deltamode 决定单位(0 像素、1 行、2 页),建议统一转为像素处理,并注意跨平台符号差异。

在 JavaScript 中,可以通过监听 wheel 事件获取鼠标滚轮的滚动方向和距离,核心是读取事件对象的 deltaY(垂直方向)、deltaX(水平方向)和 deltaMode(单位模式)属性。
判断滚动方向
deltaY 是最常用、最可靠的判断垂直滚动方向的属性:
- 当 向上滚动(页面内容向上移动,即视图向上翻)时,
deltaY - 当 向下滚动(页面内容向下移动,即视图向下翻)时,
deltaY > 0 - 若支持水平滚轮(如 Shift + 滚轮),可用
deltaX:向右为正,向左为负
获取滚动距离(数值大小)
deltaY 或 deltaX 的绝对值代表滚动“量”,但要注意其单位受 deltaMode 影响:
-
deltaMode === 0:单位为 像素(大多数现代浏览器默认) -
deltaMode === 1:单位为 行(line,通常 ≈ 40px,取决于字体/行高) -
deltaMode === 2:单位为 页(page,约等于视口高度)
建议统一转换为像素进行处理(可参考 MDN wheel event docs 提供的换算逻辑)。
兼容性与推荐写法
使用标准 wheel 事件即可,无需监听已废弃的 mousewheel 或 DOMMouseScroll:
element.addEventListener('wheel', (e) => {
const isScrollUp = e.deltaY
<h3>注意跨平台差异</h3>
<p>不同设备/浏览器返回的 <code>deltaY</code> 数值可能有差异:</p>
- macOS Safari 和 Chrome 在自然滚动(惯性滚动)下,
deltaY符号与 Windows 相反(但逻辑一致:负值仍表示内容向上移) - 触控板快速滑动会产生多个小增量,而鼠标滚轮通常是较大离散值
- 不要依赖固定阈值判断“一次滚动”,应累积或节流处理高频事件
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











