[英]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。
有沒有什么技巧可以使它們獨一無二?
單擊事件發生在元素上成功的mousedown和mouseup之后。 您使用鼠標事件頂部的單擊有什么特別的原因嗎? 您應該只使用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.