<!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>css菜单演示</title>
<style type="text/css">
<!--
*{margin:0;padding:0;border:0;}
body {
 font-family: arial, 宋体, serif;
        font-size:12px;
}
#nav {
  line-height: 24px;  list-style-type: none; background:#666;
}
#nav a {
 display: block; width: 80px; text-align:center;
}
#nav a:link  {
 color:#666; text-decoration:none;
}
#nav a:visited  {
 color:#666;text-decoration:none;
}
#nav a:hover  {
 color:#FFF;text-decoration:none;font-weight:bold;
}
#nav li {
 float: left; width: 80px; background:#CCC;
}
#nav li a:hover{
 background:#999;
}
#nav li ul {
 line-height: 27px;  list-style-type: none;text-align:left;
 left: -999em; width: 180px; position: absolute; 
}
#nav li ul li{
 float: left; width: 180px;
 background: #F6F6F6; 
}
#nav li ul a{
 display: block; width: 156px;text-align:left;padding-left:24px;
}
#nav li ul a:link  {
 color:#666; text-decoration:none;
}
#nav li ul a:visited  {
 color:#666;text-decoration:none;
}
#nav li ul a:hover  {
 color:#F3F3F3;text-decoration:none;font-weight:normal;
 background:#C00;
}
#nav li:hover ul {
 left: auto;
}
#nav li.sfhover ul {
 left: auto;
}
#content {
 clear: left; 
}
-->
</style>
<script type=text/javascript><!--//--><![CDATA[//><!--
function menuFix() {
 var sfEls = document.getElementById("nav").getElementsByTagName("li");
 alert(sfEls.length);
 for (var i=0; i<sfEls.length; i++) {
  sfEls[i].onmouseover=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onMouseDown=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onMouseUp=function() {
  this.className+=(this.className.length>0? " ": "") + "sfhover";
  }
  sfEls[i].onmouseout=function() {
  this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"), "");
  }
 }
}
window.onload=menuFix;
//--><!]]></script>
</head>
<body>
<ul id="nav">
<li><a href="#">产品介绍</a>
 <ul>
 <li><a href="#">产品一</a></li>
 <li><a href="#">产品一</a></li>
 <li><a href="#">产品一</a></li>
 <li><a href="#">产品一</a></li>
 <li><a href="#">产品一</a></li>
 <li><a href="#">产品一</a></li>
 </ul>
</li>
<li><a href="#">服务介绍</a>
 <ul>
 <li><a href="#">服务二</a></li>
 <li><a href="#">服务二</a></li>
 <li><a href="#">服务二</a></li>
 <li><a href="#">服务二服务二</a></li>
 <li><a href="#">服务二服务二服务二</a></li>
 <li><a href="#">服务二</a></li>
 </ul>
</li>
<li><a href="#">成功案例</a>
 <ul>
 <li><a href="#">案例三</a></li>
 <li><a href="#">案例</a></li>
 <li><a href="#">案例三案例三</a></li>
 <li><a href="#">案例三案例三案例三</a></li>
 </ul>
</li>
<li><a href="#">关于我们</a>
 <ul>
 <li><a href="#">我们四</a></li>
 <li><a href="#">我们四</a></li>
 <li><a href="#">我们四</a></li>
 <li><a href="#">我们四111</a></li>
 </ul>
</li>
<li><a href="#">在线演示</a>
 <ul>
 <li><a href="#">演示</a></li>
 <li><a href="#">演示</a></li>
 <li><a href="#">演示</a></li>
 <li><a href="#">演示演示演示</a></li>
 <li><a href="#">演示演示演示</a></li>
 <li><a href="#">演示演示</a></li>
 <li><a href="#">演示演示演示</a></li>
 <li><a href="#">演示演示演示演示演示</a></li>
 </ul>
</li>
<li><a href="#">联系我们</a>
 <ul>
 <li><a href="#">联系联系联系联系联系</a></li>
 <li><a href="#">联系联系联系</a></li>
 <li><a href="#">联系</a></li>
 <li><a href="#">联系联系</a></li>
 <li><a href="#">联系联系</a></li>
 <li><a href="#">联系联系联系</a></li>
 <li><a href="#">联系联系联系</a></li>
 </ul>
</li>
</ul>
</body>
</html> 
代码很少,但是我看不懂,谁能帮我解释下上面的js代码,谢谢。

解决方案 »

  1.   

    如果你是在学习的话,你需要的是《 DHTML完全手册.chm 》 帮助文档。如果你只是想得到个立即的结果,等后面今天比较有空闲时间的人来帮你注释吧,
    实在不好意思,时间有限。
      

  2.   

    表达能力有限function menuFix() {  //自定义函数
     var sfEls = document.getElementById("nav").getElementsByTagName("li");//得到ID为nav下面所有li元素
     alert(sfEls.length);//弹出li元素个数
     for (var i=0; i<sfEls.length; i++) {//循环开始
      sfEls[i].onmouseover=function() {//当鼠标经过第i个li元素时执行事件
      this.className+=(this.className.length>0? " ": "") + "sfhover";//当前元素的样式名如果不为空则当前样式名+sfhover,就相当于<li class="name1 name2"></li>样多名中间加空格就是调用2个样式
      }
      sfEls[i].onMouseDown=function() {
      this.className+=(this.className.length>0? " ": "") + "sfhover";
      }
      sfEls[i].onMouseUp=function() {
      this.className+=(this.className.length>0? " ": "") + "sfhover";
      }
      sfEls[i].onmouseout=function() {
      this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"), "");//用正则清除当前样式
      }
     }
    }
    window.onload=menuFix;//页面加载完后调用menuFix函数
      

  3.   

    TO LZ:
    function menuFix() {
     var sfEls = document.getElementById("nav").getElementsByTagName("li");
     alert(sfEls.length);
     for (var j=0; j<sfEls.length; j++){!!function(i){
      sfEls[i].onmouseover=function(){
      this.className+=(this.className.length>0? " ": "") + "sfhover";
      },
      sfEls[i].onMouseDown=function(){
      this.className+=(this.className.length>0? " ": "") + "sfhover";
      },
      sfEls[i].onMouseUp=function(){
      this.className+=(this.className.length>0? " ": "") + "sfhover";
      },
      sfEls[i].onmouseout=function(){
      this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"), "");
      }}(j) }
    }
      

  4.   

    还是bing475879749 解释的好,这个函数的作用是:在页面加载完以后这个函数就循环着
    检测nav中每个li的鼠标事件么?我想只有这样才能知道鼠标点击了那个按钮,但是这样做
    会不会很费资源呢?
      

  5.   

    你认为那样能知道鼠标点击了那个按钮吗?先别谈资源问题了。貌似你自己的作品吧,如果没有猜错的话。lol
      

  6.   

    啊,那个41是我试的时候加的alert,把alert(sfEls.length);去掉就可以了,但是回去的问题好像不存在吧,你用的是什么浏览器?
      

  7.   

    我发觉删掉javascript部分,效果依然存在,你们试试!难道css的代码就可以做成下拉的效果?
      

  8.   

    CSS代码可以做下拉菜单的效果