畫布不過是一個位圖。沒有記錄表明在畫布上繪製了一個矩形,所以如果您想要檢測到點擊是在您繪製矩形的區域內,則必須記錄您繪製的區域並進行測試反對他們。例如:
var rects= [];
function mouseClick(event) {
// Get position of click relative to canvas. This is not reliable! Requires
// standards mode, and the canvas not being nested in other offsetParents.
// Getting page-relative co-ordinates reliably in all cases is outside the
// scope of this question...
//
var x= event.clientX-document.documentElement.scrollLeft-canvas.offsetLeft;
var y= event.clientY-document.documentElement.scrollTop-canvas.offsetTop;
// Hit-test each rectangle in the list of those drawn
//
for (var i= rects.length; i-->0;) {
var x0= rects[i][0], y0= rects[i][1], x1= rects[i][2], y1= rects[i][3];
if (x0<=x && x<x1 && y0<=y && y<y1) {
alert('you clicked on a rectangle!');
}
}
}
function drawRect(x, y) {
rects.push([x, y, x+16, y+16])
context.fillRect(x, y, 16, 16);
};
drawRect(10, 10);
如果你做了很多這樣的事情,你很可能會更好使用保留的模式繪圖系統,如SVG,而不是純粹的位圖畫布。在SVG中,您可以直接在矩形對象上偵聽點擊事件,移動矩形,重新堆疊等等。
看看帆布圖書館像[fabric.js]工作( http://kangax.github.com/fabric.js/demos/kitchensink/) – kangax