Похоже, ваша основная проблема заключается в передаче информации в события (функции, которые не получают параметры).
Решением этой проблемы является замыкания .Функции могут использовать любые переменные, определенные в их области видимости, и вы можете использовать это в своих интересах.
function make_event_handler(canvas){
function my_event_handler(){
alert('look, I can use '+canvas);
}
return my_event_handler;
}
elem.onclick = make_event_handler(canvas);
Вы можете сделать это более сложным, скажем, передав объект «менеджер холста» вместо этого, чтобы позволить изменять холсты во время выполненияа также добавить другие переменные, которые вам могут понадобиться ...