`MouseEvent.movementX | Y` неправильно вдвое больше - PullRequest
0 голосов
/ 16 января 2020

Я не уверен, что я неправильно понимаю, но 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>

1 Ответ

0 голосов
/ 16 января 2020

Видимо, это связано с моим DPI или настройкой под названием «Масштаб и макет, Изменить размер текстов, приложений и других элементов». Установите этот параметр на 100%, а координаты соответствуют ожидаемым. У меня обычно установлено значение 200%, и наблюдается поведение удвоенного движения X / Y. Эта проблема на github w3 c кажется связанной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...