Javascript 使用jQuery迭代地添加越来越多的div,然后设置它们的动画
我确信我一定打破了性能的基本规则,但我的迭代函数在添加了大约150个“蛆”后冻结了页面。在Flash中执行类似操作会产生很好的结果,但在几分钟后,jQuery的内容似乎就冻结了。 以下是主要功能:Javascript 使用jQuery迭代地添加越来越多的div,然后设置它们的动画,javascript,jquery,performance,memory,Javascript,Jquery,Performance,Memory,我确信我一定打破了性能的基本规则,但我的迭代函数在添加了大约150个“蛆”后冻结了页面。在Flash中执行类似操作会产生很好的结果,但在几分钟后,jQuery的内容似乎就冻结了。 以下是主要功能: function MoveMaggot(n) { if(isNaN(MagPos[n])){MagPos[n]=1}else{MagPos[n]++}; MagLeftCoord[n] += 10; var ThisMaggot = $('#MainContainer #maggot'+n); Thi
function MoveMaggot(n) {
if(isNaN(MagPos[n])){MagPos[n]=1}else{MagPos[n]++};
MagLeftCoord[n] += 10;
var ThisMaggot = $('#MainContainer #maggot'+n);
ThisMaggot.stop().animate({left:MagLeftCoord[n]+'px'},100,function() {
if(MagPos[n]%6==1){ThisMaggot.removeClass('posA').addClass('posB')};
if(MagPos[n]%6==2){ThisMaggot.removeClass('posB').addClass('posC')};
if(MagPos[n]%6==3){ThisMaggot.removeClass('posC').addClass('posD')};
if(MagPos[n]%6==4){ThisMaggot.removeClass('posD').addClass('posC')};
if(MagPos[n]%6==5){ThisMaggot.removeClass('posC').addClass('posB')};
if(MagPos[n]%6==0){ThisMaggot.removeClass('posB').addClass('posA')};
if(MagLeftCoord[n]>1000){
MagPos[n]=1;
MagLeftCoord[n]=Math.random()*1500-2000;
ThisMaggot.css({left:MagLeftCoord[n]+'px'});
if(NumOfMaggots<500){
NumOfMaggots++;
$('#MainContainer').append('<div class=maggot id=maggot'+NumOfMaggots+'></div>');
MagLeftCoord[NumOfMaggots]=Math.random()*1500-2000;
$('#maggot'+NumOfMaggots).css({top:(Math.random()*460)+'px',left:MagLeftCoord[NumOfMaggots]+'px'});
MoveMaggot(NumOfMaggots);
}
}
if(NumOfMaggots<500){MoveMaggot(n)};
})
功能移动蛆(n){
if(isNaN(MagPos[n]){MagPos[n]=1}else{MagPos[n]+};
MagLeftCoord[n]+=10;
var thismagot=$(“#主容器#蛆”+n);
thismagot.stop().animate({left:MagLeftCoord[n]+'px'},100,function(){
如果(MagPos[n]%6==1){ThisMaggot.removeClass('posA').addClass('posB')};
如果(MagPos[n]%6==2){ThisMaggot.removeClass('posB').addClass('posC')};
如果(MagPos[n]%6==3){ThisMaggot.removeClass('posC').addClass('posD')};
如果(MagPos[n]%6==4){ThisMaggot.removeClass('posD').addClass('posC')};
如果(MagPos[n]%6==5){ThisMaggot.removeClass('posC').addClass('posB')};
如果(MagPos[n]%6==0){ThisMaggot.removeClass('posB').addClass('posA')};
如果(MagLeftCoord[n]>1000){
MagPos[n]=1;
MagLeftCoord[n]=Math.random()*1500-2000;
css({left:MagLeftCoord[n]+'px'});
如果(NumofMaggots)这是因为您的浏览器使用一个线程来呈现UI和运行javascript。因此,当您长期运行的JS运行时,UI会变得无响应。Flash不会出现这种情况,因为它是一个在自己的线程上运行的外接程序。从本质上来说,我对您的问题没有答案,但我只是想指出这一点退出。感谢pep.1提供的信息。如果使用if else
而不是if
,是否会更好?2.我认为您应该创建div
,并使用样式移动它,而不是在计时器内反复创建和附加新的div
。