Во-первых, я рекомендую вам прочитать этот ответ на другой вопрос, связанный с HTML5 Canvas.Вы должны понимать, что здесь нет квадратов.Чтобы обнаружить щелчок по «квадрату», вам нужно будет отслеживать отображение каждой координаты холста на квадрат (ы), которые он логически содержит, обрабатывать одно событие щелчка на всем холсте, определять, какой квадрат(s) вы хотите изменить, а затем перерисовать холст с нужными вам изменениями.
Затем, поскольку вы, похоже, не возражаете против использования более подходящей технологии, я призываю вас сделать это в любом HTML(где каждый «квадрат» - это что-то вроде <div>
, который абсолютно позиционирован, измерен и окрашен с помощью CSS), или SVG (с использованием <rect>
, если вам нужно, чтобы квадраты можно было вращать, или хотите ввестифигур).
HTML и SVG - это системы графического режима «с удержанием», в которых рисование фигуры «сохраняет» концепцию этой фигуры.Вы можете перемещать фигуру, изменять ее цвета, размер и т. Д., И компьютер автоматически перерисовывает ее для вас.Более того, что более важно для вашего случая использования, вы можете (как с HTML, так и с SVG):
function changeColor(evt){
var clickedOn = evt.target;
// for HTML
clickedOn.style.backgroundColor = '#f00';
// for SVG
clickedOn.setAttribute('fill','red');
}
mySquare.addEventListener('click',changeColor,false);
Редактировать : я создал простую реализацию на JavaScript иHTML: http://jsfiddle.net/6qkdP/2/
Вот основной код на случай, если JSFiddle не работает:
function clickableGrid( rows, cols, callback ){
var i=0;
var grid = document.createElement('table');
grid.className = 'grid';
for (var r=0;r<rows;++r){
var tr = grid.appendChild(document.createElement('tr'));
for (var c=0;c<cols;++c){
var cell = tr.appendChild(document.createElement('td'));
cell.innerHTML = ++i;
cell.addEventListener('click',(function(el,r,c,i){
return function(){ callback(el,r,c,i); }
})(cell,r,c,i),false);
}
}
return grid;
}