2011-08-05 88 views
0

我有拉斐爾的JavaScript程序,在這裏我有幾個(幾十個,幾百個,等等)寫入頁圈子,就像這樣:刪除Raphael元素會導致它有時崩潰?

evo_sprite = paper.circle(evo.x, evo.y, this.evo_size); 

每圈有時間有限,我希望它顯示,後我希望它被銷燬,所以它不會減慢速度。

當我這樣做:

evo_sprite.hide(); 

我沒有問題,但我知道精靈仍然存在,因此仍然佔用內存。

所以,我想:

evo_sprite.remove(); 

而且得到了什麼似乎是相同的結果(圓圈不再顯示)。

唯一的問題是,一定量的時間(似乎是隨機的)之後,我的程序凍結和我得到的錯誤信息:

a1.paper是不確定的 [打破這個錯誤]拉斐爾=( function(){var a =/[,] + /,aO =/... eturn d;}; an.el = ax [aY]; return an;})();

這對任何人都有意義嗎?我是否打電話不正確?我如何讓拉斐爾的代碼(在min文件的第7行)通過調用一個圓上的remove來打破?

回答

0

很難知道沒有看到你的代碼,但它看起來像是拉斐爾帆布沒有被發現(我認爲這就是a1.paper是什麼)。

你是否在document.onload(或$(document).ready with jQuery)上實例化你的Raphael canvas?確保你的代碼中沒有任何閉包使得函數試圖在a1.paper的範圍之外運行。

然後回到基礎 - 只用幾圈開始,然後是50,然後是100.然後在不同的瀏覽器中嘗試它,看它是否停止工作。 SVG的瀏覽器密集程度很高,因此創建數千個圈子可能會導致一些瀏覽器崩潰。

+0

我在document.onload上實例化畫布。我不認爲這確實是一個問題,因爲我一次不會看到這個問題需要幾分鐘的時間。我可以隨時將新的東西呈現在畫布上(並隱藏它們),而畫布顯然是在那裏......它有時不會讓我從它上面移除東西。 – Jenny

+0

好吧,回到你所建議的基礎知識,並意識到我只有在刪除最後一個圓後纔會出現錯誤......這很奇怪(它不是像屏幕上唯一的對象,也有正方形)。將看得更遠。等等,不是每一個。討厭鬼。 – Jenny