Cheer 发表于 2007-4-28 11:00:32

鼠标特效windows xp风格的鼠标右键菜单

把下列代码加到网页的<body></body>标签之间 从google下载我的照片管理软件
<html><head><title>mouse-menu</title>
<meta content="text/html; charset=gb2312" http-equiv=content-type>
<meta content="mshtml 5.00.2614.3500" name=generator>
<meta content=frontpage.editor.document name=progid>
<style>.menutable {
      background-color: #ffffff; border-bottom: #307ce8 1px solid; border-left: #307ce8 5px solid; border-right: #307ce8 1px solid; border-top: #94bcf3 1px solid; font-size: 12px; position: absolute; z-index: 100
}
.menutrin {
      background-color: #1a71e6; color: #ffffff; cursor: hand
}
.menutrout {
      color: #000000; cursor: hand
}
.menutd0 {
      height: 25px; text-align: center; width: 28px; 改变这个修改菜单高度--->:
}
.menutd1 {
      font-family: webdings; text-align: right; width: 46px
}
.linktd1 {
      width: 46px
}
.menutd2 {
      width: 4px
}
.menuhr {
      border-bottom: #307ce8 1px inset; border-left: #307ce8 1px inset; border-right: #307ce8 1px inset; border-top: #307ce8 1px inset
}
</style>
<bgsound id=thebs loop=0 src=""></head>
<body bgcolor=#eaf5fd style="font-size: 10pt">
<script><!----

/*-----------------------------------------------------------
鼠标右键菜单 1.0 designed by strolle-mail: csy-163@163.com



--------------------------------------------------------------*/

//---------------有关数据 -----------------//

var iconlist = new array();   // icon图片 集合, 下标从 1 开始

      iconlist = new image();
      
      iconlist.src = "icon/edit.gif";
      
      iconlist = new image();
      
      iconlist.src = "icon/sub.gif";

      iconlist = new image();
      
      iconlist.src = "icon/com.gif";      
      
      iconlist = new image();
      
      iconlist.src = "icon/hel.gif";      

//----------------检测变量 菜单的显示隐藏就靠它了!!!------------------//      

var justmenuid = "";

var submenulist = new array();

var nowsubmenu = "";      

var mousecansound = true;          //---------------------------声音开关 ------声音开关 ------------------//

var menuspeed   =50;   //---------- 菜单显示速度 ------------//

var alphastep   =30;   //---------- alpaha 变化 度 -----------//
      
//------------- 构建 主菜单 对象 -------------//

function mousemenu(objname)
{
      this.id         = "menu_"+objname;
      this.obj          = objname;
      this.length= 0;
      
      
      this.addmenu = addmenu;
      this.addlink = addlink;
      this.addhr   = addhr;      
      
      justmenuid = this.id;
      
      document.body.insertadjacenthtml('beforeend','<table id="'+this.id+'" border="0" cellspacing="0" cellpadding="0" style="top: 0; left: 0; visibility: hidden; filter:alpha(opacity=0);" class="menutable" onmousedown=event.cancelbubble=true; onmouseup=event.cancelbubble=true></table>');
}

//----------- 构建 子菜单 对象 -------------//

function submenu(objname,objid)
{
      this.obj = objname;
      this.id= objid;

      this.addmenu = addmenu;
      this.addlink = addlink;
      this.addhr   = addhr;

      this.length= 0;
}


//-------------- 生成 菜单 makemenu 方法 -----------//
function makemenu(subid,oldid,word,icon,url,target,thetitle)
{
      var thelink = '';
      

      if(icon&&icon!="")
      {
                icon = '<img border="0" src="'+iconlist.src+'">';
      }
      else
      {
                icon = '';
      }
      
      if(!thetitle||thetitle=="")
      {
                thetitle = '';
      }
      
      
      if(url&&url!="")
      {
                thelink += 'http://code.ik8.com/html/+IconList.src+<a href="'+url+'" ';
               
                if(target&&target!="")
                {
                        thelink += '';
                        thelink += 'target="'+target+'" '
                }
               
                thelink += '></a>';
      }
      
      var oobj = document.getelementbyid(oldid);

      /*--------------------------------------------- 菜单html样式
      
          <tr class="menutrout" id="trmenu_one_0" title="i am title">
      <td class="menutd0"><img src="icon/sub.gif" border="0" width="16" height="16">http://code.ik8.com/html/icon/sub.gif</td>
      <td><a href="javascript:alert('i am menu');" target="_self"></a><nobr>菜单一</nobr></td>
      <td class="menutd1">4</td>
      <td class="menutd2">&nbsp;</td>
    </tr>

      
      --------------------------------------------------*/
      
      oobj.insertrow();
      

      with(oobj.rows(oobj.rows.length-1))
      {
                id                         = "tr"+subid;
                classname      = "menutrout";
               
                title       = thetitle;

      }
      
      eventobj = "tr"+subid;
      
      eval(eventobj+'.attachevent("onmouseover",mtrover('+eventobj+'))');      
      eval(eventobj+'.attachevent("onclick",mtrclick('+eventobj+'))');      
               
      var trobj = eval(eventobj);

      for(i=0;i<4;i++)
      {
                trobj.insertcell();
      }

      with(oobj.rows(oobj.rows.length-1))
      {
                cells(0).classname = "menutd0";
                cells(0).innerhtml = icon;

                cells(1).innerhtml = thelink+'<nobr class=indentword>'+word+'</nobr>';
                cells(1).calssname = "indentword"
               
                cells(2).classname = "menutd1";
                cells(2).innerhtml = "4";
               
                cells(3).classname = "menutd2";
                cells(3).innertext = " ";
               
      }      
      
      
      
      document.body.insertadjacenthtml('beforeend','<table id="'+subid+'" border="0" cellspacing="0" cellpadding="0" style="top: 0; left: 0; visibility: hidden; filter:alpha(opacity=0);" class="menutable" onmousedown=event.cancelbubble=true; onmouseup=event.cancelbubble=true></table>');
      
      
               
}


//---------------- 生成连接 makelink 方法 ------------//
function makelink(subid,oldid,word,icon,url,target,thetitle)
{
      
      
      var thelink = '';
      
      if(icon&&icon!="")
      {
                icon = '<img border="0" src="'+iconlist.src+'">';
      }
      else
      {
                icon = '';
      }
      
      if(!thetitle||thetitle=="")
      {
                thetitle = '';
      }
      
      
      if(url&&url!="")
      {
                thelink += 'http://code.ik8.com/html/+IconList.src+<a href="'+url+'" ';
               
                if(target&&target!="")
                {
                        thelink += '';
                        thelink += 'target="'+target+'" '
                }
               
                thelink += '></a>';
      }
      
      var oobj = document.getelementbyid(oldid);
      
      
      /*--------------------------------------------- 连接html样式
      
          <tr class="menutrout" id="trmenu_one_0" title="i am title">
      <td class="menutd0"><img src="icon/sub.gif" border="0" width="16" height="16">http://code.ik8.com/html/icon/sub.gif</td>
      <td><a href="javascript:alert('i am link');" target="_self"></a><nobr>连接一</nobr></td>
      <td class="linktd1"></td>
      <td class="menutd2">&nbsp;</td>
    </tr>

      
      --------------------------------------------------*/      
      
      oobj.insertrow();
      

      with(oobj.rows(oobj.rows.length-1))
      {
                id                         = "tr"+subid;
                classname      = "menutrout";               
                title       = thetitle;

      }
      
      eventobj = "tr"+subid;
      
      eval(eventobj+'.attachevent("onmouseover",ltrover('+eventobj+'))');      
      eval(eventobj+'.attachevent("onmouseout",ltrout('+eventobj+'))');               
      eval(eventobj+'.attachevent("onclick",mtrclick('+eventobj+'))');      
               
      var trobj = eval(eventobj);

      for(i=0;i<4;i++)
      {
                trobj.insertcell();
      }

      with(oobj.rows(oobj.rows.length-1))
      {
                cells(0).classname = "menutd0";
                cells(0).innerhtml = icon;

                cells(1).innerhtml = thelink+'<nobr class=indentword>'+word+'</nobr>';

                cells(2).classname = "linktd1";
                cells(2).innertext = " ";
               
                cells(3).classname = "menutd2";
                cells(3).innertext = " ";
               
      }      

}


//-------------- 菜单对象 addmenu 方法 ------------//
function addmenu(word,icon,url,target,title)
{
      var subid    = this.id + "_" + this.length;
      var subobj= this.obj+"["+this.length+"]";
      
      var oldid   = this.id;
      
      eval(subobj+"= new submenu('"+subobj+"','"+subid+"')");
      
         makemenu(subid,oldid,word,icon,url,target,title);
         
         this.length++;
      
}


//------------- 菜单对象 addlink 方法 -------------//
function addlink(word,icon,url,target,title)
{
      var subid    = this.id + "_" + this.length;
      var oldid= this.id;
      
         makelink(subid,oldid,word,icon,url,target,title);
         
         this.length++;      
}

//------------ 菜单对象 addhr 方法 -----------------//
function addhr()
{
      var oldid = this.id;

      var oobj = document.getelementbyid(oldid);
      
      oobj.insertrow();
      
      /*------------------------------------------
      
         <tr>
      <td colspan="4">
                <hr class="menuhr" size="1" width="95%">
       </td>
    </tr>
      
      --------------------------------------------*/      

      
      oobj.rows(oobj.rows.length-1).insertcell();

      with(oobj.rows(oobj.rows.length-1))
      {
                cells(0).colspan= 4;
                cells(0).insertadjacenthtml('beforeend','<hr class="menuhr" size="1" width="95%">');               
      }      
      
}






//--------- mtrover(obj)-------------------//
function mtrover(obj)
{
      return sub_over;
      
      function sub_over()
      {
      
                var sonid = obj.id.substring(2,obj.id.length);
               
                var topobj = obj.parentelement.parentelement;
               
                nowsubmenu = topobj.id;
               
                if(obj.classname=="menutrout")
                {
                        mousewave();
                }               
               
                hidemenu(1);               
               
                submenulist = nowsubmenu;

                showthemenu(sonid,mpreturn(sonid))               
               
                submenulist = sonid;
               
                if(topobj.oldtr)
                {
                        eval(topobj.oldtr+'.classname = "menutrout"');
                }

                obj.classname = "menutrin";

                topobj.oldtr = obj.id;
               

      }
}

//--------- ltrover(obj)-------------------//
function ltrover(obj)
{
      return sub_over;
      
      function sub_over()
      {
                var topobj = obj.parentelement.parentelement;

                nowsubmenu = topobj.id;
               
                hidemenu(1);
               
                submenulist = nowsubmenu;
                              
                if(topobj.oldtr)
                {
                        eval(topobj.oldtr+'.classname = "menutrout"');
                }

                obj.classname = "menutrin";

                topobj.oldtr = obj.id;

      }
}

//--------- ltrout(obj)-------------------//
function ltrout(obj)
{
      return sub_out;
      
      function sub_out()
      {
                var topobj = obj.parentelement.parentelement;
               
                obj.classname = "menutrout";
               
                topobj.oldtr = false;
      }
}

//----------mtrclick(obj)-----------------//

function mtrclick(obj)
{
      return sub_click;
      
      function sub_click()
      {
                if(obj.cells(1).all.tags("a").length>0)
                {
                        obj.cells(1).all.tags("a")(0).click();
                }      

      }
}


//---------- returnindex(str)--------------//

function returnindex(str)
{
      return (str.split("_").length-3)
}


//---------showthemenu(obj,num)-----------------//

function showthemenu(obj,num)
{
      var topobj = eval(obj.substring(0,obj.length-2));
      
      var trobj= eval("tr"+obj);
      
      var obj = eval(obj);
      
      if(num==0)
      {
                with(obj.style)
                {
                        pixelleft = topobj.style.pixelleft +topobj.offsetwidth;
                        pixeltop= topobj.style.pixeltop + trobj.offsettop;
                }
      }
      if(num==1)
      {
                with(obj.style)
                {
                        pixelleft = topobj.style.pixelleft + topobj.offsetwidth;
                        pixeltop= topobj.style.pixeltop+ trobj.offsettop + trobj.offsetheight - obj.offsetheight;
                }
      }
      if(num==2)
      {
                with(obj.style)
                {
                        pixelleft = topobj.style.pixelleft -obj.offsetwidth;
                        pixeltop= topobj.style.pixeltop + trobj.offsettop;
                }      
      }
      if(num==3)
      {
                with(obj.style)
                {
                        pixelleft = topobj.style.pixelleft -obj.offsetwidth;
                        pixeltop= topobj.style.pixeltop+ trobj.offsettop + trobj.offsetheight - obj.offsetheight;
                }      
      }
      
      obj.style.visibility= "visible";         
      
      if(obj.alphaing)
      {
                clearinterval(obj.alphaing);
      }
      
      obj.alphaing = setinterval("menu_alpha_up("+obj.id+","+alphastep+")",menuspeed);      
}

//----------hidemenu(num)-------------------//

/*----------------------
var submenulist = new array();

var nowsubmenu = "";      

---------------------*/

function hidemenu(num)
{
      var thenowmenu = "";
      
      var obj = null;
      
      if(num==1)
      {
                thenowmenu = nowsubmenu
      }
      
      
      
      for(i=submenulist.length-1;i>=0;i--)
      {
                if(submenulist&&submenulist!=thenowmenu)
                {
                        
                        obj = eval(submenulist);
                        
                        if(obj.alphaing)
                        {
                              clearinterval(obj.alphaing);
                        }      

                        obj.alphaing = setinterval("menu_alpha_down("+obj.id+","+alphastep+")",menuspeed);
                        
                        obj.style.visibility = "hidden";               
                        
                        eval("tr"+submenulist).classname = "menutrout";
                                                
                        submenulist = null;      
                }
                else
                {
                        if(submenulist==thenowmenu)
                        {
                              return;
                        }
                }
      }
      
      nowsubmenu = "";
}




//-----------mainmenuposition return()------------//

function mmpreturn()
{
      var obj = eval(justmenuid);
      
      var x = event.clientx;
      var y = event.clienty;
      
      var judgerx = x + obj.offsetwidth;
      var judgery = y + obj.offsetheight;

      var px = 0;
      var py = 0;
      
      if(judgerx>document.body.clientwidth)
      {
                px = 2;
      }
      if(judgery>document.body.clientheight)
      {
                py = 1;
      }
               
      return (px+py);
}

//-----------menuposition return(obj)--------------//

function mpreturn(obj)
{
      var topobj = eval(obj.substring(0,obj.length-2));
      
      var trobj= eval("tr"+obj);
      
      var x = topobj.style.pixelleft + topobj.offsetwidth;
      var y = topobj.style.pixeltop+ trobj.offsettop;

      obj = eval(obj);
      
      var judgery =obj.offsetheight + y;
      var judgerx =obj.offsetwidth+ x;
      
      var py = 0;
      var px = 0;
      
      if(judgery>=document.body.clientheight)
      {
                py = 1;
      }
      
      if(judgerx>= document.body.clientwidth)
      {
                px = 2;
      }
                        
      return (px+py);
}

//-----------mousewave()-------------//

function mousewave()
{
      if(mousecansound)
      {
                thebs.src= "sound/sound.wav";
      }      
}

//----------- menu_alpha_down -------//

function menu_alpha_down(obj,num)
{
                var obj = eval(obj);
               
                if(obj.filters.alpha.opacity > 0 )
                {
                        obj.filters.alpha.opacity += -num;
                }      
                else
                {      
                        clearinterval(obj.alphaing);
                        obj.filters.alpha.opacity = 0;
                        obj.alphaing = false;                        
                        obj.style.visibility = "hidden";
                }      
}


//------------ menu_alpha_up --------//

function menu_alpha_up(obj,num)
{
                var obj = eval(obj);
               
                if(obj.filters.alpha.opacity<100)
                        obj.filters.alpha.opacity += num;
                else
                {      
                        clearinterval(obj.alphaing);
                        obj.filters.alpha.opacity = 100;
                        obj.alphaing = false;
                }      
}


//----------- ie contextmenu -----------------//

function document.oncontextmenu()
{
      return false;
}


//----------- ie mouseup ----------------//

function document.onmouseup()
{
      if(event.button==2)
      {
      
                hidemenu(0);
               

                var obj = eval(justmenuid)
               
               
                        obj.style.visibility = "hidden";
                        
                        
                        if(obj.alphaing)
                        {
                              clearinterval(obj.alphaing);
                        }
                        
                        obj.filters.alpha.opacity = 0;
                        
                        var judger = mmpreturn()
                        
                        if(judger==0)
                        {
                              with(obj.style)
                              {
                                        pixelleft = event.clientx + document.body.scrollleft;
                                        pixeltop= event.clienty + document.body.scrolltop;
                              }
                        }
                        if(judger==1)
                        {
                              with(obj.style)
                              {
                                        pixelleft = event.clientx + document.body.scrollleft;
                                        pixeltop= event.clienty - obj.offsetheight + document.body.scrolltop;
                              }
                        }
                        if(judger==2)
                        {
                              with(obj.style)
                              {
                                        pixelleft = event.clientx - obj.offsetwidth + document.body.scrollleft;
                                        pixeltop= event.clienty + document.body.scrolltop;
                              }
                        }
                        if(judger==3)
                        {
                              with(obj.style)
                              {
                                        pixelleft = event.clientx - obj.offsetwidth + document.body.scrollleft;
                                        pixeltop= event.clienty - obj.offsetheight + document.body.scrolltop;
                              }
                        }
                        
                        mousewave();
                                                
                        obj.style.visibility = "visible";
                        
                        obj.alphaing = setinterval("menu_alpha_up("+obj.id+","+alphastep+")",menuspeed);

               
               
      }
}

//---------- ie mousedown --------------//

function document.onmousedown()
{
      if(event.button==1)
      {
                hidemenu();
               
                var obj = eval(justmenuid)
               
                if(obj.alphaing)
                {
                        clearinterval(obj.alphaing);
                }
               
                obj.alphaing = setinterval("menu_alpha_down("+obj.id+","+alphastep+")",menuspeed);
               
      }
}
//----->

</script>

<script>
      var one = new mousemenu("one");
      
      one.addmenu("菜单一",1,"javascript:alert('i am menu');","_self","i am title");
                one.addlink("连接一",2,"javascript:alert('i am link')")
                one.addhr()
                one.addlink("连接二","","javascript:alert('i am link')")               
                one.addmenu("菜单三");
                        one.length-1].addlink("连接一",1,"javascript:;")
                one.addlink("连接三","","javascript:alert('i am link')")
                one.addlink("连接四","","javascript:alert('i am link')")
      one.addlink("连接二","","javascript:alert('i am link')")
      one.addmenu("菜单二",3);
                one.addlink("连接一","","javascript:alert('i am link')")
      one.addhr();
      one.addlink("连接三,多长都可以",4,"javascript:alert('i am link')")      
               

</script>

<p><font color=#1a71e6>有声音的哦…… 可以关闭!设置 mousecansound = false;
就可以了</font></p></body></html>
<td height="27" bgco
页: [1]
查看完整版本: 鼠标特效windows xp风格的鼠标右键菜单