今天,我在Microsoft的Edge浏览器中发现了一些非常奇怪的行为,其中Wheel
事件的deltax
值显然是反向的!这特别令人惊讶,因为这与我测试过的所有其他浏览器都不一致,包括返回预期值的Internet Explorer11。
window.addEventListener('wheel', function(e) {
console.log(e.deltaX, e.deltaY);
});
我制作了一些GIF视频来展示这个问题,也链接了文件大小。
为什么会这样,有没有解决办法来处理浏览器兼容性问题?有没有一种方法来检测这一点?这种行为是bug,还是在某处有记录?
虽然我们正在等待Microsoft的正式回应,希望是以更新的形式解决该问题,但我找到了一种方法来检查浏览器是否报告了一个错误的倒置deltax
。
Edge还支持Chrome中的非标准WheelDeltax
、WheelDeltay
和WheelDelta
属性。与deltax
不同,这些值是正确的,但它们引用的是实际的车轮变化,而不是计算结果。虽然它们的实际值没有什么意义,但我们可以从中推断出正确的符号值。
在Chrome中,deltax
和wheeldeltax
正确地具有不同的符号值,因此当一个为负时,另一个为正。这意味着,如果两个值都为负值或都为正值,则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 问题答案: 有一个。所以你可以做 我明白了 因此