7

使用 Chrome 锁定指针后,如果您移动鼠标,MouseEvent.movementX 和 MouseEvent.movementY 有时会返回一个非常大的数字,看起来大约是窗口大小的一半。

这是一个最小的代码示例:

<html>
    <body>
        <canvas id="canvas" width="100" height="100" style="border: 1px solid">
        </canvas>
        <script>
            var canvas = document.getElementById("canvas");

            canvas.addEventListener("mousedown", function() {
                canvas.requestPointerLock();
            });

            document.addEventListener("mousemove", function() {
                if(Math.abs(event.movementX) > 100)
                    console.log(event.movementX);
            });
        </script>
    </body>
</html>

我的预感是,当您调用 requestPointerLock() 时,它实际上并没有将鼠标锁定在一个位置,而只是隐藏了它。当鼠标离开窗口时,它会将鼠标弹回中心,这会导致变量出现较大的峰值。

大尖峰的原因是什么,我该如何解决?

4

0 回答 0