You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery同时绑定scroll和mousewheel事件,获取deltaY返回undefined如何解决

问题原因
  • 事件触发逻辑问题:你同时为window绑定了scroll和mousewheel两个事件,两类事件都会触发同一个回调函数。只有触发mousewheel事件时才会进入if分支给getDelta赋值,触发scroll事件时不会进入if分支,变量没有被赋值,自然返回undefined。
  • 变量规范问题:你没有为getDelta设置初始默认值,且var声明的变量仅提升声明不提升赋值,未进入赋值分支时变量就没有有效值。
  • jQuery事件对象取值问题:jQuery封装的事件对象不会直接挂载原生事件属性,deltaY需要到原始事件对象e.originalEvent中获取,直接取e.deltaY也可能返回无效值。
  • 语法错误:原代码回调函数结束后缺少闭合的),运行时会直接抛出语法错误。
修复方案

方案1:分开绑定事件(更清晰,推荐)

两类事件的处理逻辑本身差异较大,分开绑定避免逻辑耦合:

// 单独处理滚轮事件,获取deltaY控制滑块
$(window).on('mousewheel', function(e) {
    // 加可选链和空值合并兼容异常情况,默认值设为0可根据需求调整
    const getDelta = e.originalEvent?.deltaY ?? 0;
    console.log(getDelta);
    // 此处写入控制滑块的逻辑
})

// 单独处理滚动事件的对应逻辑
$(window).on('scroll', function(e) {
    // 此处写入滚动相关的处理逻辑
})

方案2:同一回调内兼容处理

如果必须绑定到同一个回调中,先给变量设置默认值再做分支判断:

$(window).on('scroll mousewheel', function(e) {
    // 先初始化默认值
    let getDelta = 0;
    if (e.type === "mousewheel") {
        getDelta = e.originalEvent?.deltaY ?? 0;
    }
    console.log(getDelta);
    // 后续逻辑可根据getDelta的值判断是滚动还是滚轮触发,做对应处理
})

内容的提问来源于stack exchange,提问作者Jandon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:15:04