Javascript预加载程序不';无法在Firefox中正确加载

Javascript预加载程序不';无法在Firefox中正确加载,javascript,image,firefox,preloader,Javascript,Image,Firefox,Preloader,我有一个页面,其中预加载了多个图像,因此使用Javascript更改图像时不会出现任何加载时间或闪烁。为此,我有一个Javascript预加载程序。它在Opera、Safari、Chrome和Explorer中工作得非常好,一旦页面加载,您就可以在不闪烁或加载时间的情况下更改图像。然而,在Firefox中,它似乎在工作,但在每个图像之间都有一个闪烁。当一次通过所有图像时,当再次通过它们时,每个图像之间的闪烁消失。我将此解释为预加载程序没有将图像正确加载到Firefox的缓存中。我的单独预加载脚本

我有一个页面,其中预加载了多个图像,因此使用Javascript更改图像时不会出现任何加载时间或闪烁。为此,我有一个Javascript预加载程序。它在Opera、Safari、Chrome和Explorer中工作得非常好,一旦页面加载,您就可以在不闪烁或加载时间的情况下更改图像。然而,在Firefox中,它似乎在工作,但在每个图像之间都有一个闪烁。当一次通过所有图像时,当再次通过它们时,每个图像之间的闪烁消失。我将此解释为预加载程序没有将图像正确加载到Firefox的缓存中。我的单独预加载脚本如下所示:

<!--
function loadImages()
{
if(document.images)
{
    for(i=0; i<imageArray.length; i++)
    {
        var toLoad = new Image();
        toLoad.src = imageArray[i];
    }
}
} 
-->

这是从文档的head部分加载的,首先是对外部脚本的引用,然后是将upp图像添加到数组中的函数,最后通过函数loadImages()调用

你可以在这里看到:


如果您使用Firefox,您将在第一次滚动图像时看到图像之间有一个很短的闪烁。

您删除了对新图像的引用,因此在加载完成之前它们会被垃圾收集。将它们放在数组中?

您的意思是在加载脚本中使用相同的变量,还是在页面上的代码中使用相同的变量。。。我想我不明白:)另外,奇怪的是,当我对较小的图像使用相同的脚本时,它可以完美地工作,然后甚至Firefox也可以在它们之间滚动而不点击…@fast reflections现在你创建每个图像,将其存储在局部变量中,然后开始加载。但是,当loadImages()返回toLoad时,它就超出了范围,没有任何东西会在此时将这些图像垃圾收集起来。如果图像较大,则它们将无法放入浏览器的图像缓存中,并且在对HTMLImageElements进行GCed后将被逐出。所以你要做的是创建一个全局数组,并在其中存储你的HTMLImageElements。好吧,很抱歉没有处于更高的级别,但你的意思是将图像放入一个包含图像类型的数组中,并以我现在的方式预加载它们可以解决问题吗?基本上是这样,它就像现在一样工作,但他们不会在展示之前收集垃圾?如果我没弄错的话,我还能将它们存储为图像类型吗,还是必须将它们存储为HTMLImageElements(我真的不知道什么时候使用这种类型,但我想如果出于某种原因我需要使用这种类型,我可以研究一下)。非常感谢你的帮助!啊,我想我明白了,实际的图像必须是在一个全球性的阵列中,我会尝试它,然后回来,谢谢!好的,我创建了一个全局arraylist,每次我在循环中按下toLoad当前保存的图像时,它都会指向该arraylist,但它并没有消除图像之间的闪烁:(使用数组是至关重要的还是arraylist也一样好?现在我有两个全局arraylist,一个保存图像的URL,另一个保存实际的图像对象…我做错了什么吗?