繁体   English   中英

HTML5 Canvas:如何处理mousedown mouseup mouseclick

[英]HTML5 Canvas : How to handle mousedown mouseup mouseclick

我一直在玩 html5 canvas 并遇到了问题。

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
}

在此代码中,我通过按拖动偏移进行平移,使我的鼠标单击并拖动平移 canvas 视图。 但我也有一个点击事件。 现在,每当我拖动鼠标并让 go 运行时,它都会同时运行 onmouseup 和 onclick。

有没有什么技巧可以使它们独一无二?

单击事件发生在元素上成功的mousedownmouseup之后。 您使用鼠标事件顶部的单击有什么特别的原因吗? 您应该只使用mousedown/mouseup就可以了, click是一个方便的事件,可以为您节省一些编码。

我通常会这样做:

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
}

在 function 鼠标移动中设置一个 boolean 表示发生了移动,将所有代码包含在 mouseup 中并使用 if 语句单击以检查是否没有发生拖动。 在这些 if 语句之后和函数结束之前,将拖动 boolean 设置为 false。

尝试声明一个变量,例如clickStatus = 0; 并在每个 function 开始检查以确保正确的值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM