当前位置: 首页 > 知识库问答 >
问题:

在Microsoft Edge浏览器中处理奇怪的倒置轮事件deltaX?

益何平
2023-03-14

今天,我在Microsoft的Edge浏览器中发现了一些非常奇怪的行为,其中Wheel事件的deltax值显然是反向的!这特别令人惊讶,因为这与我测试过的所有其他浏览器都不一致,包括返回预期值的Internet Explorer11。

window.addEventListener('wheel', function(e) {
    console.log(e.deltaX, e.deltaY);
});

我制作了一些GIF视频来展示这个问题,也链接了文件大小。

  • IE11
  • 边缘

为什么会这样,有没有解决办法来处理浏览器兼容性问题?有没有一种方法来检测这一点?这种行为是bug,还是在某处有记录?

    null

共有1个答案

穆宾白
2023-03-14

虽然我们正在等待Microsoft的正式回应,希望是以更新的形式解决该问题,但我找到了一种方法来检查浏览器是否报告了一个错误的倒置deltax

Edge还支持Chrome中的非标准WheelDeltaxWheelDeltayWheelDelta属性。与deltax不同,这些值是正确的,但它们引用的是实际的车轮变化,而不是计算结果。虽然它们的实际值没有什么意义,但我们可以从中推断出正确的符号值。

在Chrome中,deltaxwheeldeltax正确地具有不同的符号值,因此当一个为负时,另一个为正。这意味着,如果两个值都为负值或都为正值,则deltax的符号不正确,因为它目前在Edge中。因此,我们可以使用此属性来检测错误的反向值并取消反向。

下面是我创建的一个包装函数来解决这个问题。

function wheelDeltaX(e) {
    // Get the reported deltaX.
    var r = e.deltaX;

    // In Edge, the deltaX incorrectly matches wheelDeltaX sign.
    // If both value signs match then uninvert it.
    var wheelDeltaX;
    if (
        r &&
        (wheelDeltaX = e.wheelDeltaX) &&
        (
            (r < 0 && wheelDeltaX < 0) ||
            (r > 0 && wheelDeltaX > 0)
        )
    ) {
        r = -r;
    }

    return r;
}

只要Edge保留了WheeldelTax的正确签名,就可以保证将来的安全。

 类似资料:
  • 作为一个学校练习,我尝试使用Javascript增加按钮的宽度。 这是我的代码: 出于某种原因,单击3次后宽度停止增加。这只发生在基于Chrome的浏览器中(Chrome、Edge、Brave)。更奇怪的是,代码在我的另一台运行完全相同版本的Chrome和Edge的笔记本电脑上运行良好。在Firefox和IE9中,它也可以正常工作。我试着清理我的缓存,甚至安装了一个新的浏览器(Vivaldi),它

  • 本文向大家介绍javascript浏览器兼容教程之事件处理,包括了javascript浏览器兼容教程之事件处理的使用技巧和注意事项,需要的朋友参考一下 1. window.event 【分析说明】先看一段代码   以上代码在IE运行的结果是[object],而在Firefox无法运行。   因为在IE中event作为window对象的一个属性可以直接使用,但是在Firefox中却使用了W3C的模型

  • 本文向大家介绍js事件处理程序跨浏览器解决方案,包括了js事件处理程序跨浏览器解决方案的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js事件处理程序跨浏览器解决方案,供大家参考,具体内容如下 再为大家分享js原生事件处理跨浏览器的代码: 以上就是本文的全部内容,希望对大家解决js事件处理程序跨浏览器有所帮助。

  • 事件 是某事发生的信号。所有的 DOM 节点都生成这样的信号(但事件不仅限于 DOM)。 这是最有用的 DOM 事件的列表,你可以浏览一下: 鼠标事件: click —— 当鼠标点击一个元素时(触摸屏设备会在点击时生成)。 contextmenu —— 当鼠标右键点击一个元素时。 mouseover / mouseout —— 当鼠标指针移入/离开一个元素时。 mousedown / mouseu

  • 问题内容: 当用户更改页面缩放时,是否可以使用JavaScript检测?我只是想捕获一个“缩放”事件并对其进行响应(类似于window.onresize事件)。 谢谢。 问题答案: 无法主动检测是否有变焦。我在这里找到了如何尝试实现它的好方法。 我发现了两种检测缩放级别的方法。检测缩放级别变化的一种方法取决于不缩放百分比值的事实。百分比值是相对于视口宽度的,因此不受页面缩放的影响。如果您插入两个元

  • 问题内容: socket.io中有一种方法可以在断开连接的事件中创建超时,然后检查用户是否已重新连接? 这个想法是仅在超时后未重新连接用户时才发出数据/将用户状态保存在数据库中 编辑 :@Are Wojciechowski回答之后,我已经完成了多个标签页和F5洪水处理程序 https://gist.github.com/foohey/7696811 问题答案: 有一个。所以你可以做 我明白了 因此