如何从内存中删除动态创建的div?

时间:2012-06-08 22:40:16

标签: javascript jquery

我遇到了一个javascript问题,它会在页面上随机创建背景div(在我的网站背景上创建这些浮动圆圈)。该脚本按间隔运行:

var floatInterval = window.setInterval(createFloaters, 10000);
function createFloaters()
            {
                lastHeight = 0;
                pageOffset = $('#logo').offset();
                for(j = 0; j<10; j++)
                {
                    randomSize = j * Math.random()*20;
                    randomTop = Math.random()*randomSize + lastHeight + Math.random()*10 + 10;
                    plusOrMinus = [-1,1][Math.random()*2|0];
                    randomColorNum = Math.floor(Math.random()*colArr.length);
                    randomColor = colArr[randomColorNum];
                    randomLeft = Math.random()*990 + pageOffset.left;
                    randomOpacity = Math.random()*.5;

                    $('#floatContainer').append('<div class="circle d' + j + '" style="width:' + randomSize + 'px; height:' + randomSize + 'px; position: absolute; top:' + eval((randomTop - Math.random()*500)*plusOrMinus) + 'px; left:' + eval((randomLeft + Math.random()*200)*plusOrMinus) + 'px; border-radius:' + randomSize + 'px; background:' + randomColor + '"></div>');
                    lastHeight += randomSize;
                    $('.d' + j).delay(Math.random()*500).animate({top: randomTop, left: randomLeft, opacity: randomOpacity}, Math.random()*5000 + 5000).fadeOut().queue(function(){

                    $(this).remove();


                    });
                }

                console.log('FLOAT LENGTH: ' + $('#floatContainer div.circle').length);
            }

创建浮动圆后,它会动画,然后被移除。似乎没有完全删除div。

当我在关注选项卡时追踪创建的div数量时,我得到了正常的东西。

Number of Divs: 13
Number of Divs: 21
Number of Divs: 13
Number of Divs: 21
Number of Divs: 13
Number of Divs: 21

然后我切换标签,在那里坐几分钟,回到原始标签,这就是我所看到的:

Number of Divs: 187
Number of Divs: 197
Number of Divs: 207
Number of Divs: 13
Number of Divs: 21
Number of Divs: 13
Number of Divs: 21
Number of Divs: 13
Number of Divs: 21

我该怎么做才能解决这个问题?如何从内存中永久删除动态创建的div?我检查了活动监视器,页面继续占用内存的时间越长。

1 个答案:

答案 0 :(得分:4)

您正在使用队列错误。只需添加一个回调到fadeOut。

.fadeOut(function(){$(this).remove();});