2011-11-17 68 views
0

我有一个页面预先加载了多个图片,以便使用Javascript更改图片将不会出现任何加载时间或闪烁。为此,我有一个Javascript预加载器。它在Opera,Safari,Chrome和Explorer中运行良好,一旦页面加载完毕,您可以更改图像而无需任何闪烁或加载时间。然而,在Firefox中,它似乎在工作,但每个图像之间都有闪烁。当经过所有人后,每个图像之间的闪烁再次经过时会消失。我将此解释为预加载器未正确加载图像到Firefox的缓存中。我的单独的预加载脚本看起来像这样:Javascript preloader在Firefox中加载不正确

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

这是从文件的头部,首先将参照外部脚本,然后至UPP图像添加到阵列的功能,然后最终通过函数调用加载loadImages()。

你可以在这里看到:http://www.siroccomosaique.se/SLUTTEST/galleri_.cls

如果你使用Firefox,你会看到图像之间的非常短的闪烁你第一次滚动查看照片。

回答

0

您可以删除对新图像的引用,以便在加载完成前收集垃圾。把它们放在一个数组中?

+0

你的意思是在加载脚本中使用相同的变量,或者你的意思是在页面上的代码...我不认为我理解:)另外,有什么奇怪的是,当我使用相同的脚本与较小的图像,然后即使Firefox滚动通过他们没有闪烁... –

+0

@ fast-reflexes现在你创建每个图像,存储在本地变量,然后开始加载。但是,当loadImages()返回到负载超出范围,并没有什么是保持那些垃圾收集的图像。如果图像很大,则它们将不适合浏览器的图像缓存,并且一旦HTMLImageElements被GCed处理就会被驱逐。所以你想要做的是创建一个全局数组并将HTMLImageElement存储在那里。 –

+0

好吧,对不起,不在更高的水平,但你的意思是将图像放入一个带有图像类型的数组中,并按照我现在所做的方式预加载它们可以解决问题?基本上这样就可以像现在一样工作,但是它们在被显示之前不会收集垃圾。如果我得到了正确的,我仍然可以将它们存储为图像类型,或者我必须将它们存储为HTMLImageElements(我真的不知道何时使用此类型,但我想我可以看看它,如果这是我需要由于某种原因使用)。非常感谢您的帮助! –