2013-04-28 135 views
0

我有一段代碼,它每隔十分之一秒向文檔添加一個div,將它隨機移動到頁面邊緣,然後將其刪除。目前幀率非常低,所以我想知道是否有辦法讓div在頁面邊緣離開時自動移除(左邊或頂部值超過100%或低於0%)自動從DOM中刪除元素

或是否有任何其他方式來達到幀速率...

下面的代碼:

function myFunction() { 

//the following generates four random numbers between 100-400 and asigns 2 of them to be the top and left values 

var RN=Math.floor(Math.random()*2); 
var RN2=Math.floor(Math.random()*2); 
var RNMB4=Math.random()*300+100; 
var RNMB2=Math.random()*300+100; 
var RNMB3=Math.abs(Math.random()*300) * -1; 
var RNMB1=Math.abs(Math.random()*300) * -1; 
var NMBRS=[RNMB1,RNMB2]; 
var NMBRS2=[RNMB3,RNMB4]; 
    $("<div/>").appendTo('body').animate({ 
      left: NMBRS[RN] + '%', 
      top: NMBRS[RN] + '%', 
      }, 
      1000), function(){$(this).remove();}); 
    } 

    setInterval(myFunction,100); 
+1

使用螢火蟲或鉻來分析代碼。不要猜測效率低下的地方。 – Kyle 2013-04-28 15:55:02

回答

1

很多時候隱藏和要素比較便宜,然後從DOM中刪除。當它完成動畫時,我會嘗試在元素上調用.hide()。

根據您要動畫的元素數量,最終可能需要清理它們。

隨機生成的數字的數量可以減少2/3。它們的生成可能相當昂貴。

0

您可以使用requestAnimationFrame方法來提高動畫性能,雖然此api通常需要供應商前綴並且不向後兼容。

還有一件事是,你應該通常,如果不是總是,設置動畫元素的位置:絕對。以便元素不會使文檔重排。

您可以使用Greensock高性能js動畫庫。它也有一個jQuery插件來平滑jQuery中的動畫方法。

順便說一句,不必要的括號會使您的代碼不匹配...也許這是您粘貼代碼時的錯字?