一個很Cool的JS菜單效果_javascript技巧

來源:互聯網
上載者:User
代碼封裝完成啦
在這裡謝謝大家對我的支援!
偶參照一些Flash網站的菜單,
用javascript仿了一個,效果還是挺Cool的.

簡單地寫一個使用說明:
第一步:實體化X-Menu類
   用法:
   var <實體變數>.new CoolMenuControl()

第二步:建立功能表項目---

  用法:
    <實體變數>.insertmenu(類型,Html代碼,連結網址,目標)
     類型:0代表功能表標題,1代表樹型菜單子項目,2代表橫向菜單子項目
     Html代碼:顯示在菜單上的Html代碼
      連結網址:不用多說了,網址或Javascript指令碼
      目標:預設為空白,既不在本頁開啟;"_blank"代表在新的頁面開啟
 例如:     
    CoolMenu2.insertmenu("2","<img src=yun_qi_img/arrow.gif> 新浪網","http://www.sina.com.cn/","_blank")   

第三步:建立菜單---

  用法:
    <實體變數>.init(實體變數名,邊框顏色,背景顏色,滑動速度,背景半透明度)
       '實體變數名'必須與<實體變數>相同
       如果背景顏色="transparent"既為完全透明
 例如:     
    CoolMenu1.init("CoolMenu1","#002000","#38FFff",0.1,15)  
<script> function CoolMenuControl(){ //-----常規變數--- this.lastScrollX=0; this.lastScrollY=0; this.lastScrollW=0; this.lastScrollH=0; this.td_X=0; this.td_Y=0; this.td_W=0; this.td_H=0; this.td=0; this.mouseon=0; this.current=null this.hk_name; this.hktable_name; this.menudiv_name; this.menutable_name; this.ml=0; this.menuarray=new Array(); this.speed; this.href=""; //-----功能表項目--- function menuitem(type,value,url,target){ this.type=type this.value=value this.url=url this.target=target } //-----插入菜單--- this.insertmenu=function(type,value,url,target){ this.menuarray[this.menuarray.length]=new menuitem(type,value,url,target) } //-----程式初試化--- this.init=function(name,bdc,bgc,speed,Alpha){ var inhtml="" var cellcount=0 var lastcellcount=0 this.hk_name=name+"hk" this.hktable_name=name+"hktable" this.menudiv_name=name+"menudiv" this.menutable_name=name+"menutable" this.speed=speed for (i=0;i<this.menuarray.length;i++) { if (this.menuarray[i].type=="2") cellcount=cellcount+1 if (this.menuarray[i].type=="1" || this.menuarray[i].type=="0") {cellcount=0} if (lastcellcount<cellcount) {lastcellcount++} } //alert(cellcount) stylecode="cursor:hand;filter:Alpha(style=0,opacity="+Alpha+");background-color:"+bgc suspendcode="<DIV id="+this.hk_name+" onclick='"+name+".doClick()'>" +"<table id="+this.hktable_name+" border='1' width='0' cellspacing='0' bordercolor='"+bdc+"'>" +"<tr><td height='18' +stylecode+"'></td></tr></table></div>"; document.write(suspendcode); var fcell=true for (i=0;i<this.menuarray.length;i++) { switch(this.menuarray[i].type) { case "0": t=cellcount*2 if (t<=0) { inhtml+='<tr><td colspan=2 class=ht onmouseover=\''+name+'.href="'+this.menuarray[i].url+','+this.menuarray[i].target+'"\'>'+this.menuarray[i].value } else { inhtml+='<tr><td colspan='+t+' class=ht onmouseover=\''+name+'.href="'+this.menuarray[i].url+','+this.menuarray[i].target+'"\'>'+this.menuarray[i].value } fcell=true break; case "1": t=(cellcount-1)*2 if (t<=0) { inhtml+='<tr><td width=6><td onmouseover=\''+name+'.href="'+this.menuarray[i].url+','+this.menuarray[i].target+'"\'>'+this.menuarray[i].value } else { inhtml+='<tr><td width=6><td colspan='+t+' onmouseover=\''+name+'.href="'+this.menuarray[i].url+','+this.menuarray[i].target+'"\'>'+this.menuarray[i].value } fcell=true break; case "2": if (fcell) { inhtml+='<tr><td width=6><td onmouseover=\''+name+'.href="'+this.menuarray[i].url+','+this.menuarray[i].target+'"\'>'+this.menuarray[i].value; fcell=false } else { inhtml+='<td width=6><td onmouseover=\''+name+'.href="'+this.menuarray[i].url+','+this.menuarray[i].target+'"\'>'+this.menuarray[i].value; } break; } } inhtml='<div id='+this.menudiv_name+' onmousemove="'+name+'.doOver()">' +'<table id='+this.menutable_name+' border="0" cellpadding="2" class="menu" cellspacing="4">' +inhtml +'</table></div>'; //alert(inhtml) document.write(inhtml); this.lastScrollX=0; this.lastScrollY=-4; this.posXY(eval(this.menutable_name).cells[0]) this.td_W=eval(this.menutable_name).cells[0].scrollWidth+6 this.td_H=eval(this.menutable_name).cells[0].scrollHeight setInterval(name+".scrollback()",1) } //-----單擊超串連--- this.doClick=function(){ //alert(this.url) var url=this.href.split(",") //alert(url[0]) //alert(url[1]) if (url[0]=="") return if (url[1]=="_blank") {window.open(url[0])} else {location.href=url[0]} } //-----滑動處理--- this.scrollback=function(){ diffX=this.td_X-3 diffY=this.td_Y-5 diffW=this.td_W diffH=this.td_H percentX=this.speed*(diffX-this.lastScrollX); percentY=this.speed*(diffY-this.lastScrollY); percentW=this.speed*(diffW-this.lastScrollW); percentH=this.speed*(diffH-this.lastScrollH); if(percentX>0)percentX=Math.ceil(percentX); else percentX=Math.floor(percentX); if(percentY>0)percentY=Math.ceil(percentY); else percentY=Math.floor(percentY); if(percentW>0)percentW=Math.ceil(percentW); else percentW=Math.floor(percentW); if(percentH>0)percentH=Math.ceil(percentH); else percentH=Math.floor(percentH); eval(this.hk_name).style.pixelTop+=percentY; eval(this.hk_name).style.pixelLeft+=percentX; eval(this.hktable_name).style.pixelWidth+=percentW; eval(this.hktable_name).style.pixelHeight+=percentH; this.lastScrollX=this.lastScrollX+percentX; this.lastScrollY=this.lastScrollY+percentY; this.lastScrollW=this.lastScrollW+percentW; this.lastScrollH=this.lastScrollH+percentH; } //-----滑出--- this.doOver=function() { if (event.srcElement.tagName=="TD") { if (event.srcElement.innerText.length==0 || event.srcElement.innerText=="|") return this.posXY(event.srcElement) this.td_W=event.srcElement.scrollWidth+6 this.td_H=event.srcElement.scrollHeight } } //-----絕對位置--- this.posXY=function(obj){ hk_left=obj.offsetLeft hk_top=obj.offsetTop vParent = obj.offsetParent; while (vParent.tagName.toUpperCase() != "BODY") { hk_left += vParent.offsetLeft; hk_top += vParent.offsetTop; vParent = vParent.offsetParent; } this.td_X=hk_left this.td_Y=hk_top } //-----關於--- this.about=function(){ alert("OK") } } </script> <head> <meta http-equiv="Content-Language" content="zh-cn"> <style> .b{color=#000066;cursor:hand} .menu { font-family:Arial; cursor:Default; font-size:12px; border:1px #000000 solid; border-collapse: collapse; filter:progid:DXImageTransform.Microsoft.Gradient(gradienttype=0, startcolorstr=#ffffff, endcolorstr=#dddddd) progid:DXImageTransform.Microsoft.Shadow(direction=135,color=#cccccc,strength=3); } .ht{ font-weight:bold } </style> <!-- 第一步:實體化X-Menu類 用法: var <實體變數>.new CoolMenuControl() ---> <script language="javascript"> var CoolMenu1=new CoolMenuControl() var CoolMenu2=new CoolMenuControl() var CoolMenu3=new CoolMenuControl() var about=new Array() about[0]="關於X-Menu菜單\n\nAuthor:PuterJam\nCopyright 2004\n轉載請通知本人" about[1]="關於作者\n\n\"這傢伙很懶,什麼也沒留下!!\"\n不過歡迎大家和我交流Javascript\nQQ:10644570\nE-Mail:PuterJam@etang.com" </script> </head> <body> <!-- 第二步:建立功能表項目--- 用法: <實體變數>.insertmenu(類型,Html代碼,連結網址,目標)  類型:0代表功能表標題,1代表樹型菜單子項目,2代表橫向菜單子項目  Html代碼:顯示在菜單上的Html代碼 連結網址:不用多說了,網址或Javascript指令碼 目標:預設為空白,既不在本頁開啟;"_blank"代表在新的頁面開啟  例如: CoolMenu2.insertmenu("2"," 新浪網","http://www.sina.com.cn/","_blank")   --> <script> CoolMenu1.insertmenu("0","歡迎使用X-Menu (菜單示範)  <font >Made By PuterJam</font>","","") CoolMenu1.insertmenu("0"," ","http://www.blueidea.com/","_blank") CoolMenu2.insertmenu("0"," 橫向菜單","","") CoolMenu2.insertmenu("2"," 新浪網","http://www.sina.com.cn/","_blank") CoolMenu2.insertmenu("2"," 我的雅虎","http://cn.yahoo.com/","_blank") CoolMenu2.insertmenu("2"," 億唐","http://www.etang.com/","_blank") CoolMenu2.insertmenu("2"," 21世紀","http://www.21cn.com/","_blank") CoolMenu2.insertmenu("2"," 遊俠網","http://www.ali213.net/","_blank") CoolMenu3.insertmenu("0"," 樹形菜單","","") CoolMenu3.insertmenu("0"," ","http://www.blueidea.com/","_blank") CoolMenu3.insertmenu("1","關於X-Menu菜單","javascript:alert(about[0])","") CoolMenu3.insertmenu("1","關於作者","javascript:alert(about[1])","") CoolMenu3.insertmenu("1","聯絡我","mailto:PuterJam@etang.com","") CoolMenu3.insertmenu("1","你的瀏覽器版本","javascript:alert(navigator.appName)","") </script> <!-- 第三步:建立菜單--- 用法: <實體變數>.init(實體變數名,邊框顏色,背景顏色,滑動速度,背景半透明度) '實體變數名'必須與<實體變數>相同 如果背景顏色="transparent"既為完全透明  例如: CoolMenu1.init("CoolMenu1","#002000","#38FFff",0.1,15)   --> <script>CoolMenu1.init("CoolMenu1","#002000","#38FFff",0.1,15)</script> <script>CoolMenu2.init("CoolMenu2","#002000","#00FF80",0.2,10)</script> <script>CoolMenu3.init("CoolMenu3","#002000","#f0FF00",0.3,25)</script> </body>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.