Холст - не более чем растровое изображение. Нет записей о том, что на холсте был нарисован прямоугольник, поэтому, если вы хотите обнаружить, что щелчок был внутри области, на которой вы нарисовали прямоугольник, вы должны сохранить записи прорисованных областей и проверить их. против них. например:
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, вместо чистого растрового изображения Canvas. В SVG вы можете прослушивать события щелчка непосредственно на объекте прямоугольника, перемещать прямоугольник, складывать его и т. Д.