Javascript, 随笔

比较郁闷的MM_preloadImages问题

最近工作的过程中发现用Javascript做图片预读取总是出问题:

  1. 做个展开菜单,展开项目的底图总是不能直接显示出来。
  2. 做个缩略图切换,左右切换的时候,新换出来的图片总是不显示,非得使用鼠标右键选显示图片才行
  3. ……

代码逻辑应该没问题,所以最后归结到使用的MM_preloadImages()上,不知道为什么好像没起作用,没能在页面显示之前预读取所需图片。

简述一下我的用法,需要预读的图片有10张,我使用的是Dreamweaver 8.0提供的v3.0版本的代码,代码如下:

function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

自动生成的预读调用是在body的onload上,我将它改为.js文件,在head里调用,又编写了一个预读函数用window.onload调用,代码如下:

function doPreload(){
for (var index=0; index<10; index++){
url1 = path_prefix+'TN_'+index+path_ext;
MM_preloadImages(url1);}
}

window.onload = doPreload;

运行时并没有得到预期效果,Firefox正常,IE出错,于是我改回body调用,还是失败。我以为是函数和循环的问题,就改成MM_preloadImages(‘img1.gif’, ‘img2.gif’, …)的调用,结果还是不行。

参考了一下Google Group里的文章,说有可能是缓存图片容量太大,可是回头想想一共10张图片,每张3、4K,全读出来也就30、40K,现在的带宽肯定不成问题。

所以我现在很郁闷,不知道其他人是不是也遇到这种问题,欢迎大家来与我交流,同时希望Javascript高手可以不吝赐教,指点我一下。

UPDATE:多谢Reg提醒,让我找到了问题的方向,看样子不是MM_preloadImages预读的问题,而是调用时候的问题,上面的懒得改了,就在下面继续更新。

UPDATE2:看到一篇讲CSS在IE里面的重复渲染问题,说DIV的显隐会影响CSS重新渲染,我不知道做的那个菜单是不是这种情况。

Technorati : ,

  • http://www.kdolphin.com kDolphin

    展开菜单应该可以用CSS做吧?css里做图片预加载也是可以的。 http://specere.net/blogs/?p=4

  • 94smart

    多谢,我去试试~