CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

一个右键菜单,有人能帮我修改成多级菜单吗?

楼主fzlklmy()2006-06-01 12:30:44 在 Web 开发 / JavaScript 提问

<!--  
  //   menu   object  
  function   contextMenu()//显示部分  
  {  
    this.items   =   new   Array();  
    this.addItem   =   function   (item)  
    {  
      this.items[this.items.length]   =   item;  
    }  
    this.show   =   function   (oDoc)  
    {  
      var   var   urodz   =   new   Date("January   1,   2000");  
  var   now   =   new   Date();  
  var   ile   =   urodz.getTime()   -   now.getTime();  
  var   dni   =   Math.floor(ile   /   (1000   *   60   *   60   *   24));  
  if   (dni   >   1)  
            document.write(dni   +   "   days   left   to   year   2000!")  
  else   if   (dni   ==   1)  
            document.write("Only   two   days   left   to   year   2000!")  
  else   if   (dni   ==   0)  
            document.write("Tommorow   is   year   2000!")  
  else  
          document.write("January   1,   2000   -   year   2000");  
  startday   =   new   Date();  
  clockStart   =   startday.getTime();  
   
  function   initStopwatch()    
  {    
    var   myTime   =   new   Date();    
   
                  var   timeNow   =   myTime.getTime();      
   
                  var   timeDiff   =   timeNow   -   clockStart;    
   
                  this.diffSecs   =   timeDiff/1000;    
   
                  return(this.diffSecs);    
  }    
   
  function   getSecs()    
  {    
                  var   mySecs   =   initStopwatch();    
   
                  var   mySecs1   =   ""+mySecs;    
   
                  mySecs1=   mySecs1.substring(0,mySecs1.indexOf("."))   +   "   secs.";    
   
                  document.forms[0].timespent.value   =   mySecs1    
   
                  window.setTimeout('getSecs()',1000);    
  }  
   
  document.write("<input   size=9   name=timespent>");  
  getSecs();  
    =   "";  
      var   i;  
       
      strShow   =   "<div   id=\"rightmenu\"   style=\"BACKGROUND-COLOR:   #ffffff;   BORDER:   #000000   1px   solid;   LEFT:   0px;   POSITION:   absolute;   TOP:   0px;   VISIBILITY:   hidden;   Z-INDEX:   10\">";  
      strShow   +=   "<table   border=\"0\"   height=\"";  
      strShow   +=   this.items.length   *   20;  
      strShow   +=   "\"   cellpadding=\"0\"   cellspacing=\"0\">";  
      strShow   +=   "<tr   height=\"3\"><td   bgcolor=\"#d0d0ce\"   width=\"2\"></td><td>";  
      strShow   +=   "<table   border=\"0\"   width=\"100%\"   height=\"100%\"   cellpadding=0   cellspacing=0   bgcolor=\"#ffffff\">";  
      strShow   +=   "<tr><td   bgcolor=\"#d0d0ce\"   width=\"23\"></td><td><img   src=\"   \"   height=\"1\"   border=\"0\"></td></tr></table>";  
      strShow   +=   "</td><td   width=\"2\"></td></tr>";  
      strShow   +=   "<tr><td   bgcolor=\"#d0d0ce\"></td><td>";  
      strShow   +=   "<table   border=\"0\"   width=\"100%\"   height=\"100%\"   cellpadding=3   cellspacing=0   bgcolor=\"#ffffff\">";  
      oDoc.write(strShow);  
      for(i=0;   i<this.items.length;   i++)  
      {  
        this.items[i].show(oDoc);  
      }  
      strShow   =   "</table></td><td></td></tr>";  
      strShow   +=   "<tr   height=\"3\"><td   bgcolor=\"#d0d0ce\"></td><td>";  
      strShow   +=   "<table   border=\"0\"   width=\"100%\"   height=\"100%\"   cellpadding=0   cellspacing=0   bgcolor=\"#ffffff\">";  
      strShow   +=   "<tr><td   bgcolor=\"#d0d0ce\"   width=\"23\"></td><td><img   src=\"   \"   height=\"1\"   border=\"0\"></td></tr></table>";  
      strShow   +=   "</td><td></td></tr>";  
      strShow   +=   "</table></div>\n";  
      oDoc.write(strShow);  
    }  
  }  
   
  //   menu   Item   object  
  function   contextItem(text,   icon,   cmd,   type)  
  {  
    this.text   =   text   ?   text   :   "";  
    this.icon   =   icon   ?   icon   :   "";  
    this.cmd   =   cmd   ?   cmd   :   "";  
    this.type   =   type   ?   type   :   "menu";  
    this.show   =   function   (oDoc)  
    {  
      var   strShow   =   "";    
      if(this.type   ==   "menu")  
      {  
        strShow   +=   "<tr   ";  
        strShow   +=   "onmouseover=\"changeStyle(this,   'on');\"   ";  
        strShow   +=   "onmouseout=\"changeStyle(this,   'out');\"   ";  
        strShow   +=   "onclick=\"";  
        strShow   +=   this.cmd;  
        strShow   +=   "\">";  
        strShow   +=   "<td   class=\"ltdexit\"   width=\"16\">";  
        if   (this.icon   ==   "")  
          strShow   +=   "&nbsp;";  
        else   {  
          strShow   +=   "<img   border=\"0\"   src=\"";  
          strShow   +=   this.icon;  
          strShow   +=   "\"   width=\"16\"   height=\"16\"   style=\"POSITION:   relative\"></img>";  
        }  
        strShow   +=   "</td><td   class=\"mtdexit\">";  
        strShow   +=   this.text;  
        strShow   +=   "</td><td   class=\"rtdexit\"   width=\"5\">&nbsp;</td></tr>";  
      }  
      else   if   (this.type   ==   "separator")  
      {  
        strShow   +=   "<tr><td   class=\"ltdexit\">&nbsp;</td>";  
        strShow   +=   "<td   class=\"mtdexit\"   colspan=\"2\"><hr   color=\"#000000\"   size=\"1\"></td></tr>";  
      }    
      oDoc.write(strShow);  
    }  
  }  
   
  function   changeStyle(obj,   cmd)  
  {    
    if(obj)   try   {  
      var   imgObj   =   obj.children(0).children(0);  
       
      if(cmd   ==   'on')   {  
        obj.children(0).className   =   "ltdfocus";  
        obj.children(1).className   =   "mtdfocus";  
        obj.children(2).className   =   "rtdfocus";  
        if(imgObj)  
        {  
          if(imgObj.tagName.toUpperCase()   ==   "IMG")  
          {  
            imgObj.style.left   =   "-1px";  
            imgObj.style.top   =   "-1px";  
          }  
        }  
      }  
      else   if(cmd   ==   'out')   {  
        obj.children(0).className   =   "ltdexit";  
        obj.children(1).className   =   "mtdexit";  
        obj.children(2).className   =   "rtdexit";  
        if(imgObj)  
        {  
          if(imgObj.tagName.toUpperCase()   ==   "IMG")  
          {  
            imgObj.style.left   =   "0px";  
            imgObj.style.top   =   "0px";  
          }  
        }  
      }  
    }  
    catch   (e)   {}  
  }  
   
  function   showMenu()  
  {  
    var   x,   y,   w,   h,   ox,   oy;  
     
    x   =   event.clientX;  
    y   =   event.clientY;  
     
    var   obj   =   document.getElementById("rightmenu");  
    if   (obj   ==   null)  
      return   true;  
    ox   =   document.body.clientWidth;  
    oy   =   document.body.clientHeight;  
    if(x   >   ox   ||   y   >   oy)  
      return   false;  
    w   =   obj.offsetWidth;  
    h   =   obj.offsetHeight;  
    if((x   +   w)   >   ox)  
        x   =   x   -   w;  
    if((y   +   h)   >   oy)  
      y   =   y   -   h;  
    obj.style.posLeft   =   x   +   document.body.scrollLeft;  
    obj.style.posTop   =   y   +   document.body.scrollTop;  
    obj.style.visibility   =   "visible";  
    return   false;  
  }  
  function   hideMenu()  
  {  
    if(event.button   ==   0)  
    {  
      var   obj   =   document.getElementById("rightmenu");  
      if   (obj   ==   null)  
        return   true;  
      obj.style.visibility   =   "hidden";  
      obj.style.posLeft   =   0;  
      obj.style.posTop   =   0;  
    }  
  }  
   
  function   writeStyle()  
  {  
    var   strStyle   =   "";  
     
    strStyle   +=   "<STYLE   type=text/css>";  
    strStyle   +=   "TABLE   {Font-FAMILY:   \"Tahoma\",\"Verdana\",\"宋体\";   FONT-SIZE:   9pt}";  
    strStyle   +=   ".mtdfocus   {BACKGROUND-COLOR:   #ccccff;   BORDER-BOTTOM:   #000000   1px   solid;   BORDER-TOP:   #000000   1px   solid;   CURSOR:   hand}";  
    strStyle   +=   ".mtdexit   {BACKGROUND-COLOR:   #ffffff;   BORDER-BOTTOM:   #ffffff   1px   solid;   BORDER-TOP:   #ffffff   1px   solid}";  
    strStyle   +=   ".ltdfocus   {BACKGROUND-COLOR:   #ccccff;   BORDER-BOTTOM:   #000000   1px   solid;   BORDER-TOP:   #000000   1px   solid;   BORDER-LEFT:   #000000   1px   solid;   CURSOR:   hand}";  
    strStyle   +=   ".ltdexit   {BACKGROUND-COLOR:   #d0d0ce;   BORDER-BOTTOM:   #d0d0ce   1px   solid;   BORDER-TOP:   #d0d0ce   1px   solid;   BORDER-LEFT:   #d0d0ce   1px   solid}";  
    strStyle   +=   ".rtdfocus   {BACKGROUND-COLOR:   #ccccff;   BORDER-BOTTOM:   #000000   1px   solid;   BORDER-TOP:   #000000   1px   solid;   BORDER-RIGHT:   #000000   1px   solid;   CURSOR:   hand}";  
    strStyle   +=   ".rtdexit   {BACKGROUND-COLOR:   #ffffff;   BORDER-BOTTOM:   #ffffff   1px   solid;   BORDER-TOP:   #ffffff   1px   solid;   BORDER-RIGHT:   #ffffff   1px   solid}";  
    strStyle   +=   "</STYLE>";  
     
    document.write(strStyle);  
  }  
   
  function   makeMenu()  
  {  
    var   myMenu,   item;  
     
    var   homepage_cmd   =   "http://gamethinking.yeah.net/";  
    var   favorate_cmd   =   "window.external.addFavorite('http://gamethinking.yeah.net/','游戏思想');   return   false;";  
    var   viewcode_cmd   =   "window.location   =   'view-source:'   +   window.location.href";  
     
    myMenu   =   new   contextMenu();  
    var   Newmenu=new   Array()  
    var   Newmenu1=new   Array()  
    Newmenu[0]="返回主页"  
            Newmenu1[0]="location.href='http://www.baidu.com'"  
    Newmenu[1]="设为主页"  
            Newmenu1[1]="location.href='http://www.baidu.com'"    
    for(i=0;i<Newmenu.length;i++){  
    item   =   new   contextItem(Newmenu[i],   "images/main.gif",   Newmenu1[i],   "menu");  
    myMenu.addItem(item);  
    }  
     
    myMenu.show(this.document);  
   
    delete   item;  
    delete   myMenu;  
  }  
   
  function   toggleMenu(isEnable)  
  {  
    if(isEnable)  
      document.oncontextmenu   =   showMenu;  
    else  
      document.oncontextmenu   =   new   function()   {return   true;};  
  }  
  writeStyle();  
  makeMenu();  
  document.onclick   =   hideMenu;  
  document.oncontextmenu   =   showMenu;  
  file://-->  
   
   
  问题点数:10、回复次数:5Top

1 楼fzlklmy()回复于 2006-06-01 12:32:31 得分 0

这个JS现在只能是单级菜单,我想把它改成多级的,有办法吗?  
  如果有右键多级菜单的代码,麻烦贴下!!!  
  最好能动态修改的,我最终要的就是那个效果.................  
  谢谢先Top

2 楼snmr_com(麒麟厍人)回复于 2006-06-01 13:30:17 得分 0

多级的,你昨天贴的那个不是能实现了吗?Top

3 楼fzlklmy()回复于 2006-06-01 16:03:01 得分 0

但代码我看不太懂,要改成动态的恐怕能力差的不是一点点啊!!!!  
  主要是怎么实现多级这步迈不出去!Top

4 楼snmr_com(麒麟厍人)回复于 2006-06-01 16:51:48 得分 10

我按昨天那个给你讲解一下吧,比这个容易理解一些  
   
  首先第一段<script>……</script>原封不动  
   
  只要修改下面这段  
  <SCRIPT   language=JScript>  
      <!--  
  var   menu   =   new   RightMenu();  
  menu.AddExtendMenu("update","start_update","4","Web   Update","rbpm",null);  
  menu.AddExtendMenu("update1","start_update","3","Web   Update01","update","http://www.baidu.com");  
  menu.AddItem("update","start_update","3","Web   Update02","update","http://www.baidu.com");  
  menu.AddItem("update1","start_update","3","Web   Update03","update1","http://www.baidu.com");  
  menu.AddItem("update3","start_update","3","Web   Update03","rbpm","http://www.baidu.com");  
  menu.AddItem("suan","start_update","a","大蒜之乡","rbpm","http://");  
  menu.AddItem("sperator","start_update","","","rbpm",null);  
   
  document.writeln(menu.GetMenu());  
      -->  
      </SCRIPT>  
   
  括号内参数是这样的("名称","不清楚","不清楚","上一层的名称","网址")  
   
  menu.AddExtendMenu("update","start_update","4","Web   Update","rbpm",null);  
  这一句是添加一个有下一层的菜单项  
  update   是个名字,自己建,不要与其它重复  
  start_update   这个不太了解是什么,  
  4   这个是什么也不太了解,你调试的时候可以试着换其他看看有没有错误  
  Web   Update   这个是菜单项显示的内容,就是看到的文字  
  rbpm   这个是表示上一层是最顶层,套用这个程序就不能改  
  null   表示没有网址  
   
  menu.AddItem("update","start_update","3","Web   Update02","update","http://www.baidu.com");  
  这句表示添加一个菜单项,但它下面没有子菜单了  
  update   也是个名称  
  Web   Update02   时显示的内容  
  再一个update表示他的上一层名称是update  
  http://www.baidu.com   当然是它连接出去的网址了  
   
   
  menu.AddItem("sperator","start_update","","","rbpm",null);  
  这句可能表示一个分隔符,建议你修改后的菜单最后也保留这句  
   
  下面几句也照着这样理解就可以了  
   
  你修改前先备份一次代码,然后边改边看效果,大不了重新做一次  
   
  Top

5 楼fzlklmy()回复于 2006-06-02 15:45:11 得分 0

..............謝謝啊,那個我看懂了!  
  就是不能改成動態的,有點美中不足了,呵呵~~~~Top

相关问题

关键词

得分解答快速导航

  • 帖主:fzlklmy
  • snmr_com

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo