Я не уверен, что я неправильно понимаю, но MDN кажется довольно ясным:
Свойство MoveX только для чтения интерфейса MouseEvent обеспечивает разницу в координате X указателя мыши между данным событием и предыдущим событием перемещения мыши. Другими словами, значение свойства вычисляется следующим образом: currentEvent.movementX = currentEvent.screenX - previousEvent.screenX. ( ср c)
Тем не менее, movementX
и movementY
кажутся точно в два раза больше ожидаемого значения. Это не просто , иногда , это происходит при каждом событии мыши. При небольших движениях, из-за ошибок округления, я предполагаю, что movementX
& movementY
может быть на 1 пиксель меньше или больше, чем двойное изменение в screenX
и screenY
. Но если вы суммируете все числа за несколько движений, они в точности удваиваются.
Я использую windows 10, chrome стабильно 79.0.3945.117.
Минимальный воспроизводимый пример:
let div = document.querySelector('div');
let lastPoint = [0, 0];
div.addEventListener('mousemove', e => {
let point = [e.screenX, e.screenY];
let delta = point.map((v, i) => v - lastPoint[i]);
console.log(`delta (${delta[0]}, ${delta[1]}). movement (${e.movementX}, ${e.movementY})`)
lastPoint = point;
});
div {
outline: 1px solid black;
height: 200px;
width: 500px;
}
<div></div>