Подтвердить что ты не робот

Холст HTML5: как обрабатывать mousedown mouseup mouseclick

Я играл с холстом html5 и столкнулся с проблемой.

canvas.onmousedown = function(e){
        dragOffset.x = e.x - mainLayer.trans.x;
        dragOffset.y = e.y - mainLayer.trans.y;
        canvas.onmousemove = mouseMove;
}
canvas.onmouseup = function(e){
    canvas.onmousemove = null;
}

canvas.onmouseclick = mouseClick;

function mouseMove(e){
    mainLayer.trans.x = e.x - dragOffset.x;
    mainLayer.trans.y = e.y - dragOffset.y;
    return false;
}

function mouseClick(e){
    // click action
}

В этом коде я делаю щелчок мыши + перетащить панорамирование вида холста, переведя его смещением. Но у меня также есть событие click. Прямо сейчас, всякий раз, когда я перетаскиваю мышь и отпускаю ее, она запускается как onmouseup, так и onclick.

Существуют ли какие-либо методы, чтобы сделать их уникальными?

4b9b3361

Ответ 1

Событие клика происходит после успешной мыши и мыши на элементе. Есть ли какая-то конкретная причина, по которой вы используете клик над событиями мыши? Вы должны быть в порядке с помощью mousedown/mouseup, щелчок - это событие удобства, которое экономит вам немного кодирования.

Обычно я делал это так:

var mouseIsDown = false;

canvas.onmousedown = function(e){
    dragOffset.x = e.x - mainLayer.trans.x;
    dragOffset.y = e.y - mainLayer.trans.y;

    mouseIsDown = true;
}
canvas.onmouseup = function(e){
    if(mouseIsDown) mouseClick(e);

    mouseIsDown = false;
}

canvas.onmousemove = function(e){
    if(!mouseIsDown) return;

    mainLayer.trans.x = e.x - dragOffset.x;
    mainLayer.trans.y = e.y - dragOffset.y;
    return false;
}

function mouseClick(e){
    // click action
}

Ответ 2

Попробуйте объявить переменную типа clickStatus = 0; и в начале каждой проверки функции, чтобы обеспечить правильное значение.

if (clickstatus == 0) {
     clickstatus =1;
     ...//function code
 };

Ответ 3

в перемещении мыши мыши задайте логическое значение, чтобы сказать, что произошло перемещение, encompase весь код в mouseup и щелкните с инструкцией if, чтобы проверить, что перетаскивание не произошло. После этих операторов if и до конца функций установите для перетаскивания булево значение false.