Это, похоже, тесно связано с этим ответом о добавлении onClick к элементу canvas, за исключением того, что вам нужно будет рассчитать положение для нескольких элементов на основе координат, по которым щелкнули.
I слегка изменил jsfiddle из , который отвечает, чтобы показать один способ узнать, по какому элементу щелкнули.Это должно дать вам некоторые идеи, но, безусловно, может быть исправлено.
var elem = document.getElementById('myCanvas'),
elemLeft = elem.offsetLeft,
elemTop = elem.offsetTop,
context = elem.getContext('2d'),
elements = [];
// Add event listener for `click` events.
elem.addEventListener('click', function(event) {
var x = event.pageX - elemLeft,
y = event.pageY - elemTop;
console.log(x, y);
elements.forEach(function(element) {
if (y > element.top && y < element.top + element.height && x > element.left && x < element.left + element.width) {
switch (element.left) {
case 20:
alert('clicked the first element');
break;
case 40:
alert('clicked the second element');
break;
case 60:
alert('clicked the third element');
break;
default:
alert('No idea what you clicked')
}
}
});
}, false);
// Add element.
elements.push({
colour: '#05EFFF',
width: 20,
height: 20,
top: 20,
left: 20
});
// Add element.
elements.push({
colour: 'red',
width: 20,
height: 20,
top: 20,
left: 40
});
// Add element.
elements.push({
colour: 'blue',
width: 20,
height: 20,
top: 20,
left: 60
});
// Render elements.
elements.forEach(function(element) {
context.fillStyle = element.colour;
context.fillRect(element.left, element.top, element.width, element.height);
});
Единственное отличие здесь состоит в том, что мы используем координаты, по которым щелкнули, чтобы решить, какой отдельный элемент холста был нажат.