如何用JS制作(至少)三级的下拉式(导航)菜单?(支持IE/Netscape等其它浏览器)

导读:
  如何用JS制作至少三级的下拉式(导航)菜单?
  并且要在IE/Netscape等一些常用浏览器中也有效果!
  
  越简单,越好用.越好!(最好能设置菜单的颜色颜色,带框)
  问题点数:50、回复次数:17Top
   1 楼 wsh236(与龙同在)回复于 2005-08-27 21:22:58 得分 3
  我想给你源码呢!可是说我的太多不让回复!晕!只好给你个网址了!
  http://www.51windows.net/myjs/?u=/hw/asp/jsview.asp?id=118Top
   2 楼 qqvip2(qqvip)回复于 2005-08-27 21:38:50 得分 0
  感谢" wsh236(与龙同在)" 的热心参与我问题的回答.
  
  可惜的是,这菜单既不是三层的(只是二层的)菜单,又不能在netscape下正常使用,三个要求中:只有是下拉式菜单符合了要求...所以....
  
  不好意思,我还是用不上这代码,不过还是感谢你的热心回答!Top
   3 楼 gaofeng2000(高老师)回复于 2005-08-28 00:17:11 得分 3
  关注Top
   4 楼 qqvip2(qqvip)回复于 2005-08-28 07:52:40 得分 0
  唉,求答案!Top
   5 楼 syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)回复于 2005-08-28 08:34:07 得分 20
  请问你在什么地方看见你说的这种菜单了吗?
  如果看见了,查看它的源码就行了,我是没代码给你,因为学过软件界面设计的人都知道,关于菜单有个基本准则“前2级是菜单,第3级以后是用弹出的对话窗口”3级以上的菜单是不合格的设计,因为不符合容易使用的原则。延时少了太乱,多了太慢。
  
  不妨看看你熟悉的软件,那么大一套Office你看见第3级了吗?所有要求第3级操作的都是弹出个窗口给你。再看看操作复杂点的,比如AutoCAD,3DMax,Photoshop,那些需要复杂操作的地方你看见第3级了吗?有机会给你看见第3级的都是些不注意界面细节的小公司的东西。
  
  再考虑一下吧,楼主。虽然我举的例子都不是WebApp的,不过道理是一样的。Top
   6 楼 qqvip2(qqvip)回复于 2005-08-30 12:40:57 得分 0
  有看过3级的(所指就是两个子弹单的呀)
  
  但都只能在ie下使用!Top
   7 楼 qqvip2(qqvip)回复于 2005-08-30 12:42:19 得分 0
  子菜单.(如:开始>程序>附件>娱乐>媒体播放器,这样子的)Top
   8 楼 ip928(赵晓骏)回复于 2005-08-30 12:57:10 得分 3
  syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)
  说的很有道理,学到东西了Top
   9 楼 syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)回复于 2005-08-31 07:52:53 得分 21
  如果你指的是2级子菜单。如果你已经看见这样的菜单,查看他的源码,拿下来,自己修改一下。
  对于流,可能存在不同浏览器的显示结果完全不同,换成内框。
  对于document.all.######因为在非ie内核的浏览器上没有all对象,利用aspx一般只有一个form并且一般所有控件都在这个form里,可以把这个form的id设为all,投机取巧了点,不过实用。
  对于有些浏览器对控件认id有些认name,只要所有地方都给它2个。
  。。。。。。其他的类似处理。
  
  
  另外,不可能要求在所有浏览器都正常,只要IE,NN,FF等主流浏览器的最新2到3个版本正常就差不多了,使用其他内核浏览器的人反正他们也习惯了看哪里都不正常,不会怪你的。呵呵,就好象如果有人用的是UNIX上那个可以直接发送到新闻组那个浏览器(UNIX下现在还有些人用)忘记叫什么了,连鼠标都不支持,全是用键盘,点超连接是用组合键(好象是shift+右方向键),也不支持js。。。对于那样的浏览器,你急也没办法。对不对?Top
   10 楼 singlepine(小山)回复于 2005-09-20 13:46:06 得分 0
  
  
   导航栏菜单
  
  
  
  
  
  
  <script language="JavaScript">
  var mmenus = new Array();
  var misShow = new Boolean();
  misShow=false;
  var misdown = new Boolean();
  misdown=false;
  var mnumberofsub=0;
  var musestatus=false;
  var mpopTimer = 0;
  mmenucolor='#89CB10';mfontcolor='MenuText';mmenuoutcolor='#ADEF34';mmenuincolor='#B5E74E';mmenuoutbordercolor='#ECFA3A';mmenuinbordercolor='#5A2614';mmidoutcolor='#A9DA1D';mmidincolor='#799310';mmenuovercolor='#004080';mitemedge='0';msubedge='1';mmenuunitwidth=66;mmenuitemwidth=140;mmenuheight=25;mmenuwidth='100%';mmenuadjust=0;mmenuadjustV=0;mfonts='font-family: 宋体; font-size: 9pt; color: MenuText; ';mcursor='hand';
  var swipeSteps = 4;
  var swipemsec = 25;
  var swipeArray = new Array();
  function swipe(el, dir, steps, msec) {
  if (steps == null) steps = swipeSteps;
  if (msec == null) msec = swipemsec;
  if (el.swipeIndex == null)
  el.swipeIndex = swipeArray.length;
  if (el.swipeTimer != null)
  window.clearTimeout(el.swipeTimer);
  swipeArray[el.swipeIndex] = el;
  el.style.clip = "rect(-99999, 99999, 99999, -99999)";
  if (el.swipeCounter == null || el.swipeCounter == 0) {
  el.orgLeft = el.offsetLeft;
  el.orgTop = el.offsetTop;
  el.orgWidth = el.offsetWidth;
  el.orgHeight = el.offsetHeight;
  }
  el.swipeCounter = steps;
  el.style.clip = "rect(0,0,0,0)";
  window.setTimeout("repeat(" + dir + "," + el.swipeIndex + "," + steps + "," + msec + ")", msec);
  }
  function repeat(dir, index, steps, msec) {
  el = swipeArray[index];
  var left = el.orgLeft;
  var top = el.orgTop;
  var width = el.orgWidth;
  var height = el.orgHeight;
  if (el.swipeCounter == 0) {
  el.style.clip = "rect(-99999, 99999, 99999, -99999)";
  return;
  }
  else {
  el.swipeCounter--;
  el.style.visibility = "visible";
  switch (dir) {
  case 2:
  el.style.clip = "rect(" + height*el.swipeCounter/steps + "," + width + "," + height + "," + 0 + ")";
  el.style.top = top - height*el.swipeCounter/steps;
  break;
  case 8:
  el.style.clip = "rect(" + 0 + "," + width + "," + height*(steps-el.swipeCounter)/steps + "," + 0 + ")";
  el.style.top = top + height*el.swipeCounter/steps;
  break;
  case 6:
  el.style.clip = "rect(" + 0 + "," + width + "," + height + "," + width*(el.swipeCounter)/steps + ")";
  el.style.left = left - width*el.swipeCounter/steps;
  break;
  case 4:
  el.style.clip = "rect(" + 0 + "," + width*(swipeSteps - el.swipeCounter)/steps + "," + height + "," + 0 + ")";
  el.style.left = left + width*el.swipeCounter/steps;
  break;
  }
  
  el.swipeTimer = window.setTimeout("repeat(" + dir + "," + index + "," + steps + "," + msec + ")", msec);
  }
  }
  var mtmpleft="";
  var mtmptop="";
  function hideSwipe(el) {
  window.clearTimeout(el.swipeTimer);
  el.style.visibility = "hidden";
  el.style.clip = "rect(-99999, 99999, 99999, -99999)";
  el.swipeCounter = 0;
  if(mtmpleft!="")el.style.left = mtmpleft;
  if(mtmptop!="")el.style.top = mtmptop;
  }
  
  function stoperror(){
  return true;
  }
  window.οnerrοr=stoperror;
  function mpopOut() {
  mpopTimer = setTimeout('mallhide()', 500);
  }
  function getReal(el, type, value) {
  temp = el;
  while ((temp != null) && (temp.tagName != "BODY")) {
  if (eval("temp." + type) == value) {
  el = temp;
  return el;
  }
  temp = temp.parentElement;
  }
  return el;
  }
  
  
  function mMenuRegister(menu)
  {
  mmenus[mmenus.length] = menu
  return (mmenus.length - 1)
  }
  
  function mMenuItem(caption,command,target,isline,statustxt,level,img,sizex,sizey,pos){
  this.items = new Array();
  this.caption=caption;
  this.command=command;
  this.target=target;
  this.isline=isline;
  this.statustxt=statustxt;
  if(level!=null){mnumberofsub++;
  this.hasc=mnumberofsub;}
  this.level=level;
  this.img=img;
  this.sizex=sizex;
  this.sizey=sizey;
  this.pos=pos;
  }
  
  function mMenu(caption,command,target,img,sizex,sizey,pos){
  this.items = new Array();
  this.caption=caption;
  this.command=command;
  this.target=target;
  this.img=img;
  this.sizex=sizex;
  this.sizey=sizey;
  this.pos=pos;
  this.id=mMenuRegister(this);
  }
  function mMenuAddItem(item)
  {
  this.items[this.items.length] = item
  item.parent = this.id;
  this.children=true;
  }
  
  mMenu.prototype.addItem = mMenuAddItem;
  mMenuItem.prototype.addsubItem = mMenuAddItem;
  
  function mtoout(src){
  
  src.style.borderLeftColor=mmenuoutbordercolor;
  src.style.borderRightColor=mmenuinbordercolor;
  src.style.borderTopColor=mmenuoutbordercolor;
  src.style.borderBottomColor=mmenuinbordercolor;
  src.style.backgroundColor=mmenuoutcolor;
  src.style.color=mmenuovercolor;
  }Top
   11 楼 singlepine(小山)回复于 2005-09-20 13:47:19 得分 0
  function mtoin(src){
  
  src.style.borderLeftColor=mmenuinbordercolor;
  src.style.borderRightColor=mmenuoutbordercolor;
  src.style.borderTopColor=mmenuinbordercolor;
  src.style.borderBottomColor=mmenuoutbordercolor;
  src.style.backgroundColor=mmenuincolor;
  src.style.color=mmenuovercolor;
  }
  function mnochange(src){
  src.style.borderLeftColor=mmenucolor;
  src.style.borderRightColor=mmenucolor;
  src.style.borderTopColor=mmenucolor;
  src.style.borderBottomColor=mmenucolor;
  src.style.backgroundColor=';
  src.style.color=mfontcolor;
  
  }
  function mallhide(){
  for(var nummenu=0;nummenu
  var themenu=document.all['mMenu'+nummenu]
  var themenudiv=document.all['mmenudiv'+nummenu]
  mnochange(themenu);
  mmenuhide(themenudiv);
  }
  for(nummenu=1;nummenu<=mnumberofsub;nummenu++){
  var thesub=document.all['msubmenudiv'+nummenu]
  msubmenuhide(thesub);
  mnochange(document.all['mp'+nummenu]);
  document.all["mitem"+nummenu].style.color=mfontcolor;
  }
  }
  function mmenuhide(menuid){
  menuid.style.filter='Alpha(Opacity=100)';
  hideSwipe(menuid);
  misShow=false;
  }
  function msubmenuhide(menuid){
  menuid.style.filter='Alpha(Opacity=100)';
  menuid.style.visibility='hidden';
  }
  function mmenushow(menuid,pid){
  menuid.style.filter='Alpha(Opacity=80)';
  menuid.style.left=mposflag.offsetLeft+pid.offsetLeft+mmenuadjust;menuid.style.top=mposflag.offsetTop+mmenutable.offsetHeight+mmenuadjustV;
  if(mmenuitemwidth+parseInt(menuid.style.left)>document.body.clientWidth+document.body.scrollLeft)
  menuid.style.left=document.body.clientWidth+document.body.scrollLeft-mmenuitemwidth;
  mtmpleft=menuid.style.left;mtmptop=menuid.style.top;swipe(menuid,2,4);
  misShow=true;
  }
  function mshowsubmenu(menuid,pid,rid){
  menuid.style.filter='Alpha(Opacity=80)';
  menuid.style.left=pid.offsetWidth+rid.offsetLeft;
  menuid.style.top=pid.offsetTop+rid.offsetTop-3;
  if(mmenuitemwidth+parseInt(menuid.style.left)>document.body.clientWidth+document.body.scrollLeft)
  menuid.style.left=document.body.clientWidth+document.body.scrollLeft-mmenuitemwidth;
  menuid.style.visibility='visible';
  }
  function mmenu_over(menuid,x){
  toel = getReal(window.event.toElement, "className", "coolButton");
  fromel = getReal(window.event.fromElement, "className", "coolButton");
  if (toel == fromel) return;
  if(x<0){
  misShow = false;
  mallhide();
  mtoout(eval("mMenu"+x));
  }else{
  
  mallhide();
  mtoin(eval("mMenu"+x));
  mmenushow(menuid,eval("mMenu"+x));
  
  }
  clearTimeout(mpopTimer);
  }
  function mmenu_out(x){
  toel = getReal(window.event.toElement, "className", "coolButton");
  fromel = getReal(window.event.fromElement, "className", "coolButton");
  if (toel == fromel) return;
  if (misShow){
  mtoin(eval("mMenu"+x));
  }else{
  mnochange(eval("mMenu"+x));
  }
  mpopOut()
  }
  function mmenu_down(menuid,x){
  if(misShow){
  mmenuhide(menuid);
  mtoout(eval("mMenu"+x));
  }
  else{
  mtoin(eval("mMenu"+x));
  mmenushow(menuid,eval("mMenu"+x));
  misdown=true;
  }
  }
  function mmenu_up(){
  misdown=false;
  }
  function mmenuitem_over(menuid,item,x,j,i){
  toel = getReal(window.event.toElement, "className", "coolButton");
  fromel = getReal(window.event.fromElement, "className", "coolButton");
  if (toel == fromel) return;
  srcel = getReal(window.event.srcElement, "className", "coolButton");
  for(nummenu=1;nummenu<=mnumberofsub;nummenu++){
  var thesub=document.all['msubmenudiv'+nummenu]
  if(!(menuid==thesub||menuid.style.tag>=thesub.style.tag)){
  msubmenuhide(thesub);
  mnochange(document.all['mp'+nummenu]);
  document.all["mitem"+nummenu].style.color=mfontcolor;
  }
  }
  if(item)document.all["mitem"+item].style.color=mmenuovercolor;
  if(misdown||item){
  mtoin(srcel);
  }
  else{
  mtoout(srcel);
  }
  if(x==-1)mthestatus=eval("msub"+j).items[i].statustxt;
  if(j==-1)mthestatus=mmenus[x].items[i].statustxt;
  if(mthestatus!=""){
  musestatus=true;
  window.status=mthestatus;
  }
  clearTimeout(mpopTimer);
  }
  function mmenuitem_out(hassub){
  toel = getReal(window.event.toElement, "className", "coolButton");
  fromel = getReal(window.event.fromElement, "className", "coolButton");
  if (toel == fromel) return;
  srcel = getReal(window.event.srcElement, "className", "coolButton");
  if(!hassub)mnochange(srcel);
  if(musestatus)window.status="";
  mpopOut()
  }
  function mmenuitem_down(){
  srcel = getReal(window.event.srcElement, "className", "coolButton");
  mtoin(srcel)
  misdown=true;
  }
  function mmenuitem_up(){
  srcel = getReal(window.event.srcElement, "className", "coolButton");
  mtoout(srcel)
  misdown=false;
  }
  function mexec3(j,i){
  var cmd;
  if(eval("msub"+j).items[i].target=="blank"){
  cmd = "window.open('"+eval("msub"+j).items[i].command+"')";
  }else{
  cmd = eval("msub"+j).items[i].target+".location=/""+eval("msub"+j).items[i].command+"/"";
  }
  eval(cmd);
  }
  function mexec2(x){
  var cmd;
  if(mmenus[x].target=="blank"){
  cmd = "window.open('"+mmenus[x].command+"')";
  }else{
  cmd = mmenus[x].target+".location=/""+mmenus[x].command+"/"";
  }
  eval(cmd);
  }
  function mexec(x,i){
  var cmd;
  if(mmenus[x].items[i].target=="blank"){
  cmd = "window.open('"+mmenus[x].items[i].command+"')";
  }else{
  cmd = mmenus[x].items[i].target+".location=/""+mmenus[x].items[i].command+"/"";
  }
  eval(cmd);
  }Top
   12 楼 singlepine(小山)回复于 2005-09-20 13:48:53 得分 0
  function mbody_click(){
  
  if (misShow){
  srcel = getReal(window.event.srcElement, "className", "coolButton");
  for(var x=0;x<=mmenus.length;x++){
  if(srcel.id=="mMenu"+x)
  return;
  }
  for(x=1;x<=mnumberofsub;x++){
  if(srcel.id=="mp"+x)
  return;
  }
  mallhide();
  }
  }
  document.οnclick=mbody_click;
  
  function mwritetodocument(){
  var mwb=1;
  var stringx='







  var thismenu=mmenus[x];
  var imgsize="";
  if(thismenu.sizex!="0"||thismenu.sizey!="0")imgsize=" width="+thismenu.sizex+" height="+thismenu.sizey;
  var ifspace="";
  if(thismenu.caption!="")ifspace=" ";
  stringx += "









<>  ' style="filter:Alpha(Opacity=80);cursor:'+mcursor+';'+mfonts+   ' border-left: '+mwb+'px solid '+mmenuoutbordercolor+';'+   ' border-right: '+mwb+'px solid '+mmenuinbordercolor+'; '+   'border-top: '+mwb+'px solid '+mmenuoutbordercolor+'; '+   'border-bottom: '+mwb+'px solid '+mmenuinbordercolor+'; padding:0px">
'   for(var x=0;x
";   }else if(thismenu.pos=="1"){   stringx += " align=center>"+thismenu.caption+ifspace+"";   }else if(thismenu.pos=="2"){   stringx += " align=center background='"+thismenu.img+"'> "+thismenu.caption+" ";   }else{   stringx += " align=center> "+thismenu.caption+" ";   }   stringx += "";   }   stringx+="
 
";Top
   13 楼 singlepine(小山)回复于 2005-09-20 13:50:48 得分 0
  for(var x=0;x
  thismenu=mmenus[x];
  if(x<0){
  stringx+='
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值