Javascript: событие мыши "mousemove" запускается при нажатии и отпускании кнопок мыши

Как видно из названия, я заметил, что на моем холсте "mousemove" срабатывает, когда кнопки мыши нажимаются / отпускаются, хотя я на самом деле не двигаю мышь. Проблема в том, что, в случае отпускания кнопки, она срабатывает ПОСЛЕ "mouseup"!

Это нормальное поведение? Как исправить / обойти? Мне действительно нужно, чтобы "mouseup" срабатывал последним, или "mousemove" вообще не срабатывал при отпускании кнопок; setTimeout не является законным решением.

Пример: https://jsfiddle.net/h40mm4mj/1/ Очень просто: если вы откроете консоль и нажмете на холсте, вы заметите, что "mousemove" регистрируется после "mouseup"

canvas.addEventListener("mousemove", function (e) {
  console.log("mousemove");
}, false);
canvas.addEventListener("mouseup", function (e) {
  console.log("mouseup");
}, false);

РЕДАКТИРОВАТЬ: Только что протестировано, это происходит только на Chromium, Windows.

1 ответ

У меня была такая же проблема. Решите, сравнивая предыдущую позицию мыши с новой позицией мыши:

function onMouseDown (e) {
    mouseDown = { x: e.clientX, y: e.clientY };
    console.log("click");
}

function onMouseMove (e) {
    //To check that did mouse really move or not
    if ( e.clientX !== mouseDown.x || e.clientY !== mouseDown.y) {
        console.log("move");
    }
}

Взято отсюда: что делать, если события "mousemove" и "click" запускаются одновременно?

Другие вопросы по тегам