Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当指针在浏览器中快速移动时,MouseEvent.movementX返回不正确的值_Javascript_Google Chrome_Mouseevent - Fatal编程技术网

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位置偏移上一个位置,这似乎可以解决特定问题。我不知道这方面的规范,但如果明确规定移动允许进入/离开任意改变位置,则不知道,否则这确实是一个错误。