Есть ли событие перерисовки для элемента HTML5 canvas? - PullRequest
1 голос
/ 01 апреля 2010

Как видно из заголовка, мне нужно уведомление, когда содержимое элемента canvas было перерисовано. Возможно ли это?

Если нет, то уведомление, когда вся страница была перерисована, также будет в порядке (перерисовано, а не перезагружено!).

Причина, по которой мне это нужно, в том, что я хочу, чтобы текущий FPS анимации работал внутри холста.

1 Ответ

3 голосов
/ 01 апреля 2010

У самого 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 вызывается ровно один раз в каждом кадре. Однако до тех пор, пока это так, приведенный выше код будет работать.

...