当前位置: 代码迷 >> JavaScript >> 当指针在浏览器中快速移动时,MouseEvent.movementX返回不正确的值
  详细解决方案

当指针在浏览器中快速移动时,MouseEvent.movementX返回不正确的值

热度:51   发布时间:2023-06-05 09:31:22.0

我一直在开发基于鼠标移动的功能,它使用起作用。 它的效果很好,但我注意到它有时会出现奇怪的行为。 当我深入研究它时,我发现了movementX属性似乎有问题。

MDN :

MouseEvent接口的MovementX只读属性提供给定事件和上一个mousemove事件之间鼠标指针的X坐标的差异。 换句话说,该属性的值是这样计算的: currentEvent.movementX = currentEvent.screenX - previousEvent.screenX

但这并非总是如此。 如果您从浏览器外部向内部快速移动指针,由于某种原因,该值可能等于或大于screenX 由于无法在JSFiddle中重现此内容,因此我使用了此简单文档并在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>

这是描述问题的图像:

如您所见, movementX值飙升至914 根据该属性的MDN描述,它应返回当前screenX849和前一个也是849 而不是等于0的属性,而是914

为什么会这样呢?

浏览器:Chrome,版本72.0.3626.109(正式版本)(64位)

原来这是Chrome中的错误。 我已经报告 。