今天我在微软的Edge浏览器中发现了一些非常奇怪的行为,wheel events的 deltaX值显然是倒置的!这是特别令人惊讶的,因为这与我曾经测试的其他浏览器不兼容,包括返回预期值的Internet Explorer 11.

看到这个问题在操作上相当简单,只需运行以下代码,并使用鼠标滚轮或触控板.

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

为了方便起见,我创建了一个全页面的示例(片段对此而言很棘手):

Fullpage Working Example

向下滚动给出了正值,并且在Edge,IE和其他浏览器中预期会产生负值.然而,在Edge Wheel左边给出一个正值,右边是一个负值,与其他浏览器完全相反(IE11及以下的包含).

我制作了一些GIF视频,以显示与文件大小相关的问题.

> IE11
> Edge

问题:

为什么是这样的,是否有解决方案来处理浏览器兼容性问题?有没有办法检测这个特征?这个行为是一个错误,还是记录在某个地方?

The spec strongly suggests this is in-fact incorrect behavior:

If a user agent scrolls as the default action of the wheel event then the sign of the delta SHOULD be given by a right-hand coordinate system where positive X,Y,and Z axes are directed towards the right-most edge,bottom-most edge,and farthest depth (away from the user) of the document,respectively.

笔记:

>我已经在Windows 10 VM和本机笔记本电脑中测试过,两者的行为是一样的.
>我相当肯定这与“自然”/倒置滚动无关(所有系统和VM主机测试关闭,只发生在一个轴上).
>在旁注中,我不知道deltaZ是颠倒还是甚至支持开始,我缺乏这样的输入设备.

错误报告:

I’ve reported the bug to Microsoft here.它被分配给某人,所以希望它会被修复.

当我们等待Microsoft的正式回复时,希望以更新的形式解决问题,我已经找到一种方法来检查浏览器是否报告了一个不正确的倒数deltaX.

Edge还增加了对非标准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的正确签名,这应该是面向未来的.

在Microsoft Edge浏览器中处理奇怪的倒车事件deltaX?的更多相关文章

  1. iOS Safari和/或Microsoft Edge是否支持推送通知?

    从我所做的研究来看,我找不到这个问题的具体答案.桌面版Safari已支持此功能一段时间了,但iOS版本是否也支持从网站推送通知?如果没有,是否有替代解决方案?我也无法在MicrosoftEdge上找到支持此功能的任何内容.我觉得我在某个时间点读过这个,但我现在很难找到任何东西.解决方法MicrosoftEdge目前不支持通知,但目前正在考虑使用用户语音的550票.您可以在status.modern.ie.上找到当前状态

  2. 理解UIButton的imageEdgeInsets和titleEdgeInsets

    本篇博客希望用最简单粗暴的方式–实验,来了解一下imageEdgeInsets和titleEdgeInsets到底是怎么玩的。当然这只是一种建议,也许有些人觉得从默认状态计算更加方便,我也赞同,毕竟imageEdgeInsets和titleEdgeInsets只是偏移量,和初始位置在哪并没有什么关系。总结之前也被imageEdgeInsets和titleEdgeInsets困扰过,就用了UIImageView和UILabel的组合来代替,为了不影响开发进度,也只能这样做,毕竟靠这个吃饭,不过在技术层面,这

  3. android – 使用StaggeredGridLayoutManager时停止移动项目

    不只是动画.整个项目重新整理东西.谢谢解决方法使用Randy回答中建议的ImageView,您可以对Glide做同样的事情:

  4. android – 在Galaxy s6 Edge中调用Camera.release()后正在使用相机

    我在galaxys6边缘设备上有以下例外这是我的代码:这是活动的代码解决方法代码中存在严重缺陷:每个onPause都会调用mCamera.release(),但Camera.open()只调用onCreate.这就是说,在主(UI)线程上打开相机是一种不好的做法:这种调用在某些设备上可能需要很长时间(不在三星galaxy6上)甚至会导致ANR.最佳做法是在后台HandlerThread上打开相机(

  5. Android RecyclerView CardView StaggedGridLayoutManager:独立列滚动

    例如,用户将触摸并滚动右列,以便其他列不会移动?.谢谢,解决方法您是否有任何理由不只是将多个回收站与您的数据分布在一起?您可以使用OnScrollListener或自定义实现来获取您描述的视差.

  6. android – 如何避免使用RecyclerView与StaggeredGridLayoutManager之间的项目之间的双重空间?

    解决方法在您的情况下,您可以将两个边距设置为RecyclerView.但在我的情况下,图像与RecyclerView中的屏幕宽度匹配,我使用Itemdecoration来解决问题.

  7. android – StaggeredGridLayoutManager重新排列项目

    我的项目有不同的布局,有时我通过在布局中拖动项目在RecyclerView之上创建一个差距或间隙.当我回滚到RecyclerView的顶部时,一些项目被重新排序,并且它们的空白被填充.行为被捕获在这里:填补空白是可以的.拖动时项目更改位置也可以.问题在于滚动到顶部.滚动结束时会重新排序–我没有触摸屏幕.这是我如何创建回收记录和布局管理器itemtouchhelper类RecyclerView适配器

  8. Microsoft Edge浏览器javascript运行时“权限被拒绝”错误

    以下用于在弹出窗口中打开日历的代码适用于所有浏览器,但在MicrosoftEdge浏览器中出现“权限被拒绝”错误.这之前的代码:谁知道为什么会这样?

  9. windows-10 – 如何配置Windows 10不要在Edge中打开链接?

    我在Windows10中使用谷歌浏览器作为我的默认浏览器,但当我点击外部程序中的链接时,MicrosoftEdge将启动并打开链接而不是谷歌浏览器.我该如何解决?设置默认浏览器:>在“搜索”栏中键入“默认程序”,然后点击或单击“默认程序”.>点击或单击“设置默认程序”.>从程序列表中选择Chrome.>点击或单击“将此程序设为默认”,然后点击或单击“确定”.>或点击或单击“选择此程序的默认值”以选择其他默认值

  10. dell-poweredge – 无法在Dell R610 w / Centos 6上安装OMSA

    尝试使用iDRACracadm命令重置iDRACwebgui的登录密码.所以我安装了OMSA(找到这个链接http://en.community.dell.com/techcenter/systems-management/f/4469/t/19490204)上面没有问题.问题:编辑:必须在目录路径中像这样运行“sh”.新错误.更新8/25:root@server[]#racadmconfig-g

随机推荐

  1. Microsoft Edge浏览器javascript运行时“权限被拒绝”错误

    以下用于在弹出窗口中打开日历的代码适用于所有浏览器,但在MicrosoftEdge浏览器中出现“权限被拒绝”错误.这之前的代码:谁知道为什么会这样?

  2. windows-10 – 如何在Windows 10 Enterprise LTSB上安装Microsoft Edge浏览器

    从ZDNetarticle:…

  3. 在Microsoft Edge浏览器中处理奇怪的倒车事件deltaX?

    今天我在微软的Edge浏览器中发现了一些非常奇怪的行为,wheelevents的deltaX值显然是倒置的!有没有办法检测这个特征?这个行为是一个错误,还是记录在某个地方?

  4. microsoft-edge – 是否有任何方法可以通过Internet Explorer从MS Edge浏览器打开特定的Web应用程序?

    我想知道一种在MicrosoftEdge中从InternetExplorer中打开特定Web应用程序的方法,因为我们的Web应用程序在Edge中存在一些问题.有什么方法吗?

  5. 如何使用javascript来定位Windows 10 Edge浏览器

    我知道您应该尽可能地进行功能检测,但是如果浏览器是MicrosoftEdge浏览器,您可以在Javascript中检测到?

返回
顶部