嘗試有點不同的設置:
var canvas = myCanvas; //store canvas outside event loop
var isDown = false; //flag we use to keep track
var x1, y1, x2, y2; //to store the coords
// when mouse button is clicked and held
$('#myCanvas').on('mousedown', function(e){
if (isDown === false) {
isDown = true;
var pos = getMousePos(canvas, e);
x1 = pos.x;
y1 = pos.y;
}
});
// when mouse button is released (note: window, not canvas here)
$(window).on('mouseup', function(e){
if (isDown === true) {
var pos = getMousePos(canvas, e);
x2 = pos.x;
y3 = pos.y;
isDown = false;
//we got two sets of coords, process them
alert(x1 + ',' + y1 + ',' +x2 + ',' +y2);
}
});
// get mouse pos relative to canvas (yours is fine, this is just different)
function getMousePos(canvas, evt) {
var rect = canvas.getBoundingClientRect();
return {
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
};
}
那麼,爲什麼我們聽鼠標的窗口上?如果您將鼠標懸停在畫布外,然後釋放鼠標按鈕,則該事件不會在畫布上註冊。所以我們需要聽一個像窗口這樣的全球性事件。
由於我們已經在鼠標向下的事件中標記了我們的isDown
,我們知道後面的鼠標「屬於」畫布(當我們檢查isDown
標誌時)。
來源
2013-06-27 15:02:00
K3N