2010-04-01 37 views
1

正如標題所說,當canvas元素的內容被重繪時,我需要一個通知。 這可能嗎?HTML5的canvas元素是否存在重繪事件?

如果沒有,整個頁面重繪時的通知也可以(reDRAWN不重新加載!)。

我需要這個的原因是我想獲得在畫布中運行的動畫的當前FPS。

回答

2

畫布本身沒有「重繪」方法或事件。架構是這樣的,在任何時候,任何功能都可以在上下文中繪製。但是,一種可能的解決方案是「覆蓋」標記新框架圖的特定功能。具體來說,我認爲重寫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每一幀只被調用一次。但是,只要是這種情況,那麼上面的代碼就可以工作。

+0

然後我有一個問題。 我非常確定,我繪製的每幀比我多畫一個矩形:-( 我使用上面的方法測試了這種方法,導致像80000+ FPS一樣的瘋狂高幀速率 使用MozAfterPaint - 從Firefox的事件,我能夠得到真正的幀率,這是介於9和10 FPS之間:https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#MozAfterPaint 有誰知道,如果一個事件類似MozAfterPaint存在於其他瀏覽器中,例如Webkit? 或者,也許有人有一個好主意來解決我的問題? – Timo 2010-04-02 11:19:05