Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery迭代地添加越来越多的div,然后设置它们的动画_Javascript_Jquery_Performance_Memory - Fatal编程技术网

Javascript 使用jQuery迭代地添加越来越多的div,然后设置它们的动画

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

我确信我一定打破了性能的基本规则,但我的迭代函数在添加了大约150个“蛆”后冻结了页面。在Flash中执行类似操作会产生很好的结果,但在几分钟后,jQuery的内容似乎就冻结了。 以下是主要功能:

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