免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2144 | 回复: 1
打印 上一主题 下一主题

[JS菜单]感谢大家的帮助,终于做出来了JS菜单! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-11 16:23 |只看该作者 |倒序浏览
这几天学习JS。在这里问了许多问题。感谢大家的热心帮助。

我当时的想法是做一个菜单鼠标事件。
1.菜单中不使用ID。目的是为了皮肤改用起来方便。避免ID重复,或者取错名。
2.菜单中,点哪个哪个有背景。

问了许多朋友。都说应该用ID,及遍历tags的方法来实现。就是循环getElementById(*)的方法。
我试着做一个,因为每次点击,都要循环一遍节点,感觉着很不舒服。
今天看语法,见到event的用法,感觉这正是我所需要的。试着做一个菜单效果。

原理跟我当时的设想一样。
1.使用event获取接收onclick事件的tags。
2.对该tags进行css控制。
 (并给该tags添加 id 。目的是清除上次tags的css效果时,不必循环。)

  (注:这句思路,并不支持FirFox。)  

我还是JS初级学生。所采用的方法及效果并不怎样。
在这里将脚本贴出来,请大家指点,向大家学习!

脚本如下:


  1. <html>
  2. <head>
  3. <title>Qtian菜单学习</title>
  4. <style type=text/css>
  5. *{font-size:12px;margin:0px;padding:0px}
  6. a{height:20px;padding-top:3px;}

  7. .menu{width:180px;margin:10px;text-align:left;list-style-type: none;}
  8. .menu a {padding-left:20px;overflow:hidden;display: block;color:#990;height:22px;}
  9. .menu a:hover {color:#ff0;background-color:#E3E9FB;}

  10. .menu ol {list-style:none;background-color:#0F42A6;border-bottom:#FFF 1px solid;}
  11. .menu ol a:hover{background-color:#0F42A6;}

  12. .menu li {list-style:none;background-color:#CAD7F7;border-bottom:#FFF 1px solid;}
  13. .menu li a:hover{background-color:#E3E9FB;}

  14. .show{overflow:visible;}
  15. .close{overflow:hidden;height:21px;}

  16. #now_menu_id{background-color:#eee}

  17. </style>
  18. </head>

  19. <div class=menu onclick="menu(event)">
  20.         <ol class="close"><a href="#" >大栏目一</a>
  21.         <li><a href="#">栏目0</a></li>
  22.         <li><a href="#">栏目1</a></li>
  23.         <li><a href="#">栏目2</a></li>
  24.         </ol>
  25.         <ol class="close"><a href="#" >大栏目二</a>
  26.         <li><a href="#">栏目3</a></li>
  27.         <li><a href="#">栏目4</a></li>
  28.         <li><a href="#">栏目5</a></li>
  29.         </ol>
  30. </div>
  31. -------------
  32. <div class=menu onclick="menu(event)">
  33.         <ol class="close"><a href="#" >大栏目一</a>
  34.         <li><a href="#">栏目0</a></li>
  35.         <li><a href="#">栏目1</a></li>
  36.         <li><a href="#">栏目2</a></li>
  37.         </ol>
  38.         <ol class="close"><a href="#" >大栏目二</a>
  39.         <li><a href="#">栏目3</a></li>
  40.         <li><a href="#">栏目4</a></li>
  41.         <li><a href="#">栏目5</a></li>
  42.         </ol>
  43. </div>

  44. <script>
  45.         var show="show"                //menu显示时的css
  46.         var close="close"                //menu关闭时的css
  47.         var bg="now_menu_id"        //menu点击后的css
  48.         re_menu()

  49.         function menu(e){
  50.                 e = e || window.event;
  51.                 var targ = e.srcElement || e.target;
  52.                 var p=targ.parentNode.nodeName
  53.                 var tags_index=targ.sourceIndex;//不兼容MF
  54.                 //使兼容MF
  55.                 if (tags_index==undefined){
  56.                         var x = document.getElementsByTagName('*');
  57.                         for ( var i = 0 ; i < x.length; i++){
  58.                                 tags_index=i
  59.                                 if(x[i]==targ)break;
  60.                         }
  61.                 }
  62.                 if(targ.nodeName!="A")return;
  63.                 if(p=="LI"){
  64.                         if(document.getElementById(bg))document.getElementById(bg).id="";
  65.                         targ.id=bg;
  66.                         create_cookies("s_menu",tags_index);
  67.                 }else if(p=="OL"){
  68.                         targ=targ.parentNode
  69.                         targ.className=targ.className==close?show:close;
  70.                         create_cookies("b_menu",tags_index);
  71.                 }
  72.         }
  73.         //还原
  74.         function re_menu(){
  75.                 var b_menu=get_cookies("b_menu")
  76.                 if(b_menu!=false){
  77.                         b_menu=b_menu.split(",")
  78.                         for(var i=1;i<b_menu.length-1;i++){
  79.                                 document.all(b_menu[i]-1).className=show;
  80.                         }
  81.                 }
  82.                 var s_menu=get_cookies("s_menu")
  83.                 if(s_menu!=false){
  84.                         s_menu=s_menu.split(",")
  85.                         if(s_menu[1]-0>0)document.all(s_menu[1]-0).id=bg;
  86.                 }
  87.         }
  88.         function create_cookies(name,v){
  89.                 var t=get_cookies(name)
  90.                 var v=","+v+",";
  91.                 t=(t==false || name=="s_menu")?v:((t.indexOf(v)>-1)?(t.replace(v,",")):(t.substring(0,t.length-1)+v))
  92.                 document.cookie=name +"="+t;
  93.         }
  94.         function get_cookies(name){
  95.                 t=document.cookie
  96.                 if(t.length<1)return false;
  97.                 if(t.indexOf(name+"=")<0)return false
  98.                 t=t.substring(t.indexOf(name+"=")+name.length+1,t.length)
  99.                 if(t.length<1)return false;
  100.                 var end=t.indexOf(";")==-1?t.length:t.indexOf(";")
  101.                 t=t.substring(0,end)
  102.                 return t;
  103.         }
  104. </script>
复制代码

[ 本帖最后由 Qtian 于 2006-7-15 23:36 编辑 ]

菜单鼠标事件.rar

1.26 KB, 下载次数: 52

菜单鼠标事件

论坛徽章:
0
2 [报告]
发表于 2006-07-16 12:03 |只看该作者
这种思路,3年前就有了。并不稀奇。
只是,一些朋友们并不忠爱它。一半是因为目前非IE浏览器对它的兼容性不好。相似的菜单,在网上有许多。它们都不兼容MF就是证明。

目前来说,还没有办法完全离开循环。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP