2011-10-25 54 views
1

我有一个图像旋转器,为新幻灯片创建一个div,隐藏当前幻灯片,显示新的div,并删除隐藏的div。 所有这一切都是与jQuery做,我使用此代码删除我不再需要的幻灯片:清除浏览器中的内存

var last = $("#item_" + lastSlide + "_" + idSuffix); 
last.empty(); 
last.remove(); 
last = null; 

的内存每张幻灯片之后还在不断增加。 关于如何有效地清除内存的任何ideeas?

+2

这是不太可能在您发布的代码中发生内存泄漏;它更可能是在旋转或其他地方。在JavaScript中你没有控制内存的 –

+0

。最好的方法是围绕此编写更高效的代码。显示您的代码,了解如何创建幻灯片,也许我们可以帮助您改进它 – Ibu

+0

垃圾收集进程无法从内存中删除任何内容,直到删除所有对引用的引用为止。这已经写了很多:http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection,http://stackoverflow.com/questions/774357/garbage-collection – Jasper

回答

0

我想出的最好的解决方案是清除html内容,然后删除元素。

例如:

myDiv.html(""); 
myDiv.remove(); 
0

对不同的幻灯片使用不同的元素并不明智。您应该使用两个元素进行淡入淡出幻灯片。这是我前段时间写的代码:

el = function(q) {return document.getElementById(q)}; 

var slides=["logo.jpg","avond.jpg","bar.jpg","buitencloseup.jpg","servet.jpg","spelcomputers.jpg","tafelaanbar.jpg","tafelsbuiten.jpg"], 
Math.floor(Math.random()*slides.length), 
highimg=el("highimg"), 
lowimg=el("lowimg"), 
fade, 
changeslide=function() { 
    lowimg.style.backgroundImage=highimg.style.backgroundImage 
    highimg.style.backgroundImage="url(img/slideshow/"+(slides[++_src]||slides[_src=0])+")" 
    var time=highimg.style.opacity=0; 
    highimg.style.filter="alpha(opacity=0)" 

    if (fade) 
    clearInterval(fade) 

    fade=setInterval(function(){ 
     if(highimg.style.opacity<1) 
     highimg.style.filter="alpha(opacity="+(highimg.style.opacity=time+=1/40)*100+")" 
     else 
     { 
      highimg.style.filter="alpha(opacity=100)"; 
      highimg.style.opacity=1 
      clearInterval(fade); 
     } 
    },25) 
} 
interval=setInterval(changeslide,10000) 
highimg.onclick = changeslide 
changeslide() 
+0

我知道你花了一段时间来写这个,但它很混乱,请添加更多评论让它更容易理解 – Ibu

+0

我不会只更改图像。我也显示HTML内容。所以我认为这没有帮助,因为这两个容器将会填充必须删除的html内容。 – gabitzish

+0

每张幻灯片都有相同的结构吗?例如:标题,副标题,信息,图像。然后你可以重复使用不同文本和属性的每个元素。 – bopjesvla