画布不过是一个位图。没有记录表明在画布上绘制了一个矩形,所以如果您想要检测到点击是在您绘制矩形的区域内,则必须记录您绘制的区域并进行测试反对他们。例如:
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