У самого Canvas нет метода или события перерисовки. Архитектура такова, что в любое время любая функция может рисовать в контексте. Тем не менее, возможное решение было бы «переопределить» определенные функции, которые отмечают рисунок нового кадра. В частности, я думаю, что переопределение context.clearRect было бы хорошим способом.
var context=canvas.getContext('2d');
context._clearRect=context.clearRect;
context.clearRect=function(x,y,w,h){
context._clearRect(x,y,w,h);
//do your stuff here
};
Единственная проблема этого метода заключается в том, что он предполагает, что clearRect вызывается ровно один раз в каждом кадре. Однако до тех пор, пока это так, приведенный выше код будет работать.