Javascript 当指针在浏览器中快速移动时,MouseEvent.movementX返回不正确的值
我一直在开发一个基于鼠标移动的功能,它用来实现功能。它工作得很好,但我注意到它有时会有奇怪的行为。当我深入研究时,我发现了Javascript 当指针在浏览器中快速移动时,MouseEvent.movementX返回不正确的值,javascript,google-chrome,mouseevent,Javascript,Google Chrome,Mouseevent,我一直在开发一个基于鼠标移动的功能,它用来实现功能。它工作得很好,但我注意到它有时会有奇怪的行为。当我深入研究时,我发现了movementX属性的问题 MDN: MouseEvent接口的movementX只读属性提供 鼠标指针的X坐标在 给定事件和上一个mousemove事件。换句话说 属性值的计算方式如下: currentEvent.movementX=currentEvent.screenX-previousEvent.screenX 但情况并非总是如此。如果从浏览器外部、内部快速移动指针
movementX
属性的问题
MDN:
MouseEvent接口的movementX只读属性提供
鼠标指针的X坐标在
给定事件和上一个mousemove事件。换句话说
属性值的计算方式如下:
currentEvent.movementX=currentEvent.screenX-previousEvent.screenX
但情况并非总是如此。如果从浏览器外部、内部快速移动指针,由于某种原因,该值可能等于甚至大于screenX
。由于我无法在JSFIDLE中复制此文档,因此我使用了这个简单的文档并在Chrome中打开了它:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script>
document.addEventListener('mousemove', (event) => {
console.log('movementX:', event.movementX, 'clientX:', event.clientX, 'innerWidth:', window.innerWidth)
})
</script>
</body>
</html>
document.addEventListener('mousemove',(事件)=>{
console.log('movementX:',event.movementX',clientX:',event.clientX',innerWidth:',window.innerWidth)
})
下面是一幅描述问题的图片:
正如您所看到的,movementX
值峰值为914
。根据属性的MDN描述,它应该返回当前screenX
值、849
与上一个值之间的差异,即849
。属性不是等于0
,而是914
为什么会发生这种情况?
浏览器:Chrome,版本72.0.3626.109(官方版本)(64位)证明这是Chrome的一个bug。我已经报告了。没有测试,只是猜测一下,鼠标/指针进入/离开客户端区域可能是导致此问题的原因,因为移动和进入/离开事件不同步。因此,如果跟踪上一个位置并触发窗口enter事件,则通过enter位置偏移上一个位置,这似乎可以解决特定问题。我不知道这方面的规范,但如果明确规定移动允许进入/离开任意改变位置,则不知道,否则这确实是一个错误。