因为前一个程序现在有问题,所以需要修改,但是他的换图片js代码我不能完全理解透彻.只能看懂皮毛。
所以寻求js翻译专家
这是页面代码,用到js方法的就这里。<div id="menu_list_box">
    <ul id="menu_list">
        <li><a href="/list/?1"><img runat="server"  src="images/menu/dh.gif" name="dh" id="dh" onmouseover="MM_swapImage('dh','','images/menu/dh_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/list/?2"><img runat="server"  src="images/menu/kj.gif" name="kj" id="kj" onmouseover="MM_swapImage('kj','','images/menu/kj_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/list/?3"><img runat="server"  src="images/menu/wz.gif" name="wz" id="wz" onmouseover="MM_swapImage('wz','','images/menu/wz_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/list/?4"><img runat="server"  src="images/menu/ysh.gif" name="ysh" id="ysh" onmouseover="MM_swapImage('ysh','','images/menu/ysh_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/list/?5"><img runat="server"  src="images/menu/cm.gif" name="cm" id="cm" onmouseover="MM_swapImage('cm','','images/menu/cm_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/list/?7"><img runat="server"  src="images/menu/sj.gif" name="sj" id="sj" onmouseover="MM_swapImage('sj','','images/menu/sj_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/list/?8"><img runat="server"  src="images/menu/ys.gif" name="ys" id="ys" onmouseover="MM_swapImage('ys','','images/menu/ys_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/list/?9"><img runat="server"  src="images/menu/bz.gif" name="bz" id="bz" onmouseover="MM_swapImage('bz','','images/menu/bz_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/list/?10"><img runat="server"  src="images/menu/rj.gif" name="rj" id="rj" onmouseover="MM_swapImage('rj','','images/menu/rj_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/kehu/"><img runat="server"  src="images/menu/kh.gif" name="kh" id="kh" onmouseover="MM_swapImage('kh','','images/menu/kh_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
        <li><a href="/about/"><img runat="server"  src="images/menu/wm.gif" name="wm" id="wm" onmouseover="MM_swapImage('wm','','images/menu/wm_o.gif',1)" onmouseout="MM_swapImgRestore()" /></a></li>
    </ul>
</div> 这里是JS文件,就这里面的jsfunction 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];}}
}function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; 
  if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; 
  for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
从最下面的方法开始看,i,j为0,a=该方法.arguments。(就是根据ID获取图片的SRC吧,我查的,应该没理解错吧),然后new个数组。从for循环下面就开始看不太懂了。

解决方案 »

  1.   

    晕,Dreamweaver自动生成的代码....
      

  2.   


    onmouseover="MM_swapImage('dh','','images/menu/dh_o.gif',1)" 改变图片的js方法和事件,共4个参数function MM_swapImage() { //v3.0
      var i,j=0,x,a=MM_swapImage.arguments; //a是获取传过来的参数,是一个array数组
      document.MM_sr=new Array; 
      for(i=0;i<(a.length-2);i+=3)//a.length-2 也就是2个
       if ((x=MM_findObj(a[i]))!=null){//这里主要就是通过上面的参数a数组中的id,如:dh是一个id来获取dh这个对象;如果它部位null是才做下面的
           document.MM_sr[j++]=x; //将上面得到的对象x,存储到mm_sr这个array中
           if(!x.oSrc) //如果x=MM_findObj通过id=dh得到的对象没有oSrc(null、undefined、!true)就执行下面的代码
             x.oSrc=x.src; //得到的对象的src赋值给x对象中的一个oSrc属性
             x.src=a[i+2];//取到参数a也就是传过来的参数MM_swapImage.arguments,中的i+2个
                             //此时i=0,i+2也就是2个,正是MM_swapImage('dh','','images/menu/dh_o.gif',1)" 中的'images/menu/dh_o.gif'值
       }
    }
      

  3.   

    这是DW自动生成的吗?
    哈哈 哥们其实...你可以不必强调我差的,我会害羞的。~(@^_^@)~ ^_^不得不说:4L你的头像很吸引人的眼球...
      

  4.   

    这些解释都看明白了。很详细,这是dw自动生成的吗?方法里德V3.0代表的是版本么.
    function MM_findObj(n, d) { //v4.01
      var p,i,x;  if(!d) d=document; //他这里的d参数可以不传也行是吧,如果(!d)意思就是不为true,为0或者NULL,那么d=document是什么意思,表示d可以是0、NULL这种任意类型吗?
      if((p=n.indexOf("?"))>0&&parent.frames.length) {//该方法在下面调用时就传了一个ID参数,比如说是dh,那indexOf("?")结果p=-1,但是不明白他后面这个parent.frames.length是什么意思,页面中没有用到frames的地方啊
        d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
      if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];//因为上面d=document不知道是什么意思,所以这里也不懂。x=d[N]&&d.all。后面循环里的d.forms粗略了解应该是根据ID获取他的属性吧。
      for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
      if(!x && d.getElementById) x=d.getElementById(n); return x;
    }
    麻烦hoojo了,谢谢
      

  5.   

    哈哈,确实是dreamwaver生成的代码,lz拿到dreamwaver里面改吧该吧就可以了
      

  6.   


    //欲加载图片,在图片show出来之前进行下载并缓存,(d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];)
    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];}}
    }function MM_swapImgRestore() { //v3.0
      var i,x,a=document.MM_sr; //MM_sr是个全局数组,在MM_swapImage中声明的,用来存储img标记的初始图片地址
    //从MM_sr还原各个图片的历史图片
    for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
    }
    //获取dom对象的方法
    function MM_findObj(n, d) { //v4.01
      var p,i,x;  if(!d) d=document; 
      if((p=n.indexOf("?"))>0&&parent.frames.length) {
        d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
      if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
      for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
      if(!x && d.getElementById) x=d.getElementById(n); return x;
    }function MM_swapImage() { //v3.0
      var i,j=0,x,a=MM_swapImage.arguments; //arguments是这个方法的参数数组,例如'dh','','images/menu/dh_o.gif',1    (length=4)
    document.MM_sr=new Array; //声明全局数组,由下面看出里面存放的是自定义对象,存在自定义属性oSrc
    //这个循环只会循环1次,获得索引为0,根据索引0的值 即'dh' 获得dom对象,将dom的src存入全局数组MM_sr中的J++索引对象上,并改变dom对象的src为参数数组的第2位 即'images/menu/dh_o.gif'
      for(i=0;i<(a.length-2);i+=3)
       if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
    }
      

  7.   

    多谢Bird说明白方法了,相对就容易理解多了。
    但是能仔细说下获取dom的那个方法吗,那个看不大懂。尤其是d=document和parent.frames.(页面中根本没有frames)
      

  8.   

    d=document,是用d来代表document,为了简便。parent.frames.(页面中根本没有frames)
    这正是因为这些代码是DW自动生成的(一看前缀是MM_的基本就是了),所以它根本不知道你这个页面是什么情况,只按照可能最复杂的情况来写,这样可以适应包括复杂情况在内的各种页面嘛。所以自动生成代码,好处是简便,缺点是针对性不强,为追求普适性而牺牲了执行效率。
      

  9.   

    写了一个直观便捷的,效率应该好得多<script>
    var picurl="";
    function swapImage(imgobj) {
    picurl=imgobj.src;
    imgobj.src=picurl.split(".")[0]+"_o."+picurl.split(".")[1];
    }
    function ImgRestore(imgobj) {
    imgobj.src=picurl;
    }
    </script>
    <div id="menu_list_box">
        <ul id="menu_list">
            <li><a href="/list/?1"><img runat="server"  src="images/menu/dh.gif" name="dh" id="dh" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/list/?2"><img runat="server"  src="images/menu/kj.gif" name="kj" id="kj" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/list/?3"><img runat="server"  src="images/menu/wz.gif" name="wz" id="wz" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/list/?4"><img runat="server"  src="images/menu/ysh.gif" name="ysh" id="ysh" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/list/?5"><img runat="server"  src="images/menu/cm.gif" name="cm" id="cm" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/list/?7"><img runat="server"  src="images/menu/sj.gif" name="sj" id="sj" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/list/?8"><img runat="server"  src="images/menu/ys.gif" name="ys" id="ys" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/list/?9"><img runat="server"  src="images/menu/bz.gif" name="bz" id="bz" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/list/?10"><img runat="server"  src="images/menu/rj.gif" name="rj" id="rj" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/kehu/"><img runat="server"  src="images/menu/kh.gif" name="kh" id="kh" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
            <li><a href="/about/"><img runat="server"  src="images/menu/wm.gif" name="wm" id="wm" onmouseover="swapImage(this)" onmouseout="ImgRestore(this)" /></a></li>
        </ul>
    </div>
      

  10.   

    噢~ 原来如此。那自动生成的看着都头晕。还是这种方法方便啊,果然厉害。不过这样点了后,当页面上后退的时候,那个图片还是移动鼠标放上去后显示的图片.不是一开始的图片了。
    那个a标签要是要是设css的还能设点击后颜色一样,但是图片的话这里要怎么弄.
      

  11.   

    这个v3.0应该是一个版本注释信息,觉得你还要对一些常用的javascript对象、属性、方法做一个了解
    大概知道有这么一个方法就可以了,不要去记住。以后用的时候查下chm文档就知道用了