从今天(或昨天,当时没有注意到)开始,mousedown和mouseup事件不再起作用。我使用的是Chrome版本55.0.2883.95(64位)。 Safari和FireFox正常运行(我在Mac计算机上)。

这是代码:

document.getElementById("floorplan-backdrop-rect").addEventListener('mousedown', function(ev) {
    o.clickDown(ev);
}, false);

document.getElementById("floorplan-backdrop-rect").addEventListener('mouseup', function(ev) {
    o.clickUp(ev);
}, false);

关于我们错过的鼠标事件,是否有API更改? Chrome在注册事件时也不会发出任何警告。触地得分和触地事件似乎也失败了(在开发人员工具中的模拟iPad模式下)

编辑:更改选项卡后或调整窗口大小时,事件似乎会出现一会儿。然后他们再次停下..

问候

最佳答案

编辑(请参见下面的旧答案):

Chrome放弃了鼠标事件,转而使用55版及更高版本中的指针事件。

为什么(W3C):



可用代码:

要为“相同”事件添加不同的事件侦听器,请使用以下代码:

// Put these in seperate function instead of anonymous ones
// since you will need them later to deregister the event
function onPointerDown(event){ /** Do stuff here **/ }
function onPointerHover(event){ /** Do stuff here **/ }
function onPointerMove(event){ /** Do stuff here **/ }
function onPointerUp(event){ /** Do stuff here **/ }

// Add event listeners
if (isEventSupported("onpointerdown")) {
    domElement.addEventListener("pointerdown", onPointerDown, false);
    domElement.addEventListener("pointermove", onPointerHover, false);
    domElement.addEventListener("pointermove", onPointerMove, false);
    domElement.addEventListener("pointerup", onPointerUp, false);
} else if (isEventSupported("ontouchstart")) {
    domElement.addEventListener("touchstart", onPointerDown, false);
    domElement.addEventListener("touchmove", onPointerHover, false);
    domElement.addEventListener("touchmove", onPointerMove, false);
    domElement.addEventListener("touchend", onPointerUp, false);
} else if (isEventSupported("onmousedown")) {
    domElement.addEventListener("mousedown", onPointerDown, false);
    domElement.addEventListener("mousemove", onPointerHover, false);
    domElement.addEventListener("mousemove", onPointerMove, false);
    domElement.addEventListener("mouseup", onPointerUp, false);
}

// Remove event listeners
if (isEventSupported("onpointerdown")) {
    domElement.removeEventListener("pointerdown", onPointerDown, false);
    domElement.removeEventListener("pointermove", onPointerHover, false);
    domElement.removeEventListener("pointermove", onPointerMove, false);
    domElement.removeEventListener("pointerup", onPointerUp, false);
} else if (isEventSupported("ontouchstart")) {
    domElement.removeEventListener("touchstart", onPointerDown, false);
    domElement.removeEventListener("touchmove", onPointerHover, false);
    domElement.removeEventListener("touchmove", onPointerMove, false);
    domElement.removeEventListener("touchend", onPointerUp, false);
} else if (isEventSupported("onmousedown")) {
    domElement.removeEventListener("mousedown", onPointerDown, false);
    domElement.removeEventListener("mousemove", onPointerHover, false);
    domElement.removeEventListener("mousemove", onPointerMove, false);
    domElement.removeEventListener("mouseup", onPointerUp, false);
}

引用文献:
  • https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
  • https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener
  • https://developers.google.com/web/updates/2016/10/pointer-events


  • 旧答案:

    看起来像镀 Chrome 的鼠标事件,而支持55版及更高版本的指针事件。

    将原始代码更改为以下代码可以解决Chrome的问题:

    注意:不建议使用此方法,因为我们不能像这样取消注册侦听器,请参见下面的新示例。
    document.getElementById("some-id").addEventListener('pointerdown', function(ev) {
        o.clickDown(ev);
    }, false);
    
    document.getElementById("some-id").addEventListener('pointerup', function(ev) {
        o.clickUp(ev);
    }, false);
    

    请注意,如果像我们一样对事件类型进行了其他检查,则事件类型也从'mouseup'更改为'pointerup',也从'mousedown'更改为'pointerdown'
    您可以在此处阅读更新文章:

    https://developers.google.com/web/updates/2016/10/pointer-events

    关于javascript - Chrome的mousedown和mouseup事件不再起作用,其他浏览器也可以,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41181372/

    10-11 13:54
    查看更多