EDIT(见下面的旧答案):
铬抛弃鼠标事件赞成指针事件的55及以上版本。
为什么(W3C):
今天,大多数[HTML5]内容使用具有和/或设计用于鼠标 输入。那些以自定义方式处理输入的代码通常编码为 [DOM-LEVEL-3-EVENTS]鼠标事件。然而,较新的计算设备 然而包含其他形式的输入,包括触摸屏,输入笔等。已经提出事件类型来单独处理这些输入形式中的每一个。但是,当 添加对新输入类型的支持时,该方法通常会导致不必要的逻辑和事件处理开销重复。考虑到只有一个设备类型的内容写入内容时,这通常会产生兼容性问题 。此外,为了与现有的基于鼠标的内容兼容,大多数用户代理为所有输入 类型激发鼠标事件。这使得鼠标事件代表 实际鼠标设备或由另一种输入类型产生的 兼容性模糊不清,这使得难以同时对两种设备类型 进行编码。
可用代码:
要为 “同” 事件中添加不同的事件侦听器,使用下面的代码:
// 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
domElement.addEventListener("mousedown", onPointerDown);
domElement.addEventListener("pointerdown", onPointerDown);
domElement.addEventListener("touchstart", onPointerDown);
domElement.addEventListener("mousemove", onPointerHover);
domElement.addEventListener("pointermove", onPointerHover);
domElement.addEventListener("touchmove", onPointerHover);
domElement.addEventListener("mousemove", onPointerMove);
domElement.addEventListener("pointermove", onPointerMove);
domElement.addEventListener("touchmove", onPointerMove);
domElement.addEventListener("mouseup", onPointerUp);
domElement.addEventListener("pointerup", onPointerUp);
domElement.addEventListener("touchend", onPointerUp);
// Remove event listeners
domElement.removeEventListener("mousedown", onPointerDown);
domElement.removeEventListener("pointerdown", onPointerDown);
domElement.removeEventListener("touchstart", onPointerDown);
domElement.removeEventListener("mousemove", onPointerHover);
domElement.removeEventListener("pointermove", onPointerHover);
domElement.removeEventListener("touchmove", onPointerHover);
domElement.removeEventListener("mousemove", onPointerMove);
domElement.removeEventListener("pointermove", onPointerMove);
domElement.removeEventListener("touchmove", onPointerMove);
domElement.removeEventListener("mouseup", onPointerUp);
domElement.removeEventListener("pointerup", onPointerUp);
domElement.removeEventListener("touchend", onPointerUp);
参考文献:
老答案:
貌似铬抛弃鼠标事件赞成指针事件的55及以上版本。
改变原始代码以下固定我们的问题镀铬:
注:使用不建议这样做,因为我们不能注销听众喜欢这个,请参见下面的新范例。
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