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" запускаются одновременно?