JavaScript图片高亮(解释)

3

你好,我一直在设计一些网站,使用基础的javascript知识以及深入了解css和html。最近我被分配去给另一个网站添加一些简单的下拉菜单,这本身很简单,但是该网站有一些现有代码,既长又难以理解。我希望有人能帮助我将其转换为jQuery,并告诉我它如何工作,即如何更改它以使其与我的下拉菜单配合工作。 以下是代码:

<script type="text/javascript">
<!--
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_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_nbGroup(event, grpName) { //v6.0
  var i,img,nbArr,args=MM_nbGroup.arguments;
  if (event == "init" && args.length > 2) {
    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;
      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();
      nbArr[nbArr.length] = img;
      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
        if (!img.MM_up) img.MM_up = img.src;
        img.src = img.MM_dn = args[i+1];
        nbArr[nbArr.length] = img;
    } }
  } else if (event == "over") {
    document.MM_nbOver = nbArr = new Array();
    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : ((args[i+1])? args[i+1] : img.MM_up);
      nbArr[nbArr.length] = img;
    }
  } else if (event == "out" ) {
    for (i=0; i < document.MM_nbOver.length; i++) {
      img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }
  } else if (event == "down") {
    nbArr = document[grpName];
    if (nbArr)
      for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }
    document[grpName] = nbArr = new Array();
    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = img.MM_dn = (args[i+1])? args[i+1] : img.MM_up;
      nbArr[nbArr.length] = img;
  } }
}
//-->
</script>

非常感谢


我认为你可以直接使用这个,所有列出的脚本都是用基本语法编写的。 - paul
@Paul,你这句话是什么意思? - Jason
1个回答

1

看起来像是旧的所见即所得编辑器留下的代码(MM可能是MacroMedia的缩写)。

当你反混淆它并弄清楚它的作用时,你可能会用jQuery以可读的方式重写它。

更新

我刚刚查看了您的网站,效果似乎可以仅使用CSS实现(更具体地说,是:hover伪类)。

更新

我宁愿使用CSS和背景图像,但如果您想保留img元素,则这将起作用。只需为hover状态图像命名一个合理的名称即可。

此外,为什么每个li都有自己的ul父级...很奇怪。

$('#nav li a img').each(function() {
   var originalSrc = this.src,
       hoverSrc = originalSrc.replace(/\.(gif|png|jpe?g)$/, '_hover.$1'); 

   $(this).hover(function() {
      this.src = hoverSrc;
   }, function() {
      this.src = originalSrc;
   });
});

很想帮忙,但问题是这段代码的作用是,如果你查看此页面http://www.sundalah.com.au。它会在你移动鼠标时提供菜单的高亮显示,该菜单使用图像构建。哦,谢谢您重新组织我的帖子。 - Jason
我经常使用:hover伪类,但问题是菜单不是文本,而是由图像构成的,并且在每个页面上,这些图像都是不同的。我真的不想为所有页面上的每个菜单图像制作第二个“hover”图像。 - Jason
@Jason 它通过将文件名从 a.jpg 更改为 a_hover.jpg 的方式来更改 img 元素的 src 属性。 - alex
@alex 正如我之前提到的,我不太擅长 jQuery,你所说的“wrapping the code”是什么意思? - Jason
1
@Jason 在我回答中提供的代码示例中,... 是占位符。 - alex
显示剩余28条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接