一個很Cool的JS菜單效果(類似flash)

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

第二步:建立菜單項目---
  
  用法:
    <實體變量>.insertmenu(類型,Html代碼,鏈接網址,目標)
     類型:0代表菜單標題,1代表樹型菜單子項目,2代表橫向菜單子項目
     Html代碼:顯示在菜單上的Html代碼
      鏈接網址:不用多說了,網址或Javascript腳本
      目標:默認爲空,既不在本頁打開;"_blank"代表在新的頁面打開
 例如:     
    CoolMenu2.insertmenu("2","<img src=http://www.blueidea.com/img/icon/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+" style='POSITION:absolute;' onclick='"+name+".doClick()'>"
            +"<table id="+this.hktable_name+" border='1' width='0' cellspacing='0' style='border-collapse: collapse' bordercolor='"+bdc+"'>"
             +"<tr><td height='18' style='"+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:[email protected]"

</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<!--
第二步:建立菜單項目---
 
  用法:
    <實體變量>.insertmenu(類型,Html代碼,鏈接網址,目標)
     類型:0代表菜單標題,1代表樹型菜單子項目,2代表橫向菜單子項目
     Html代碼:顯示在菜單上的Html代碼
      鏈接網址:不用多說了,網址或Javascript腳本
      目標:默認爲空,既不在本頁打開;"_blank"代表在新的頁面打開
 例如:    
    CoolMenu2.insertmenu("2","<img src=http://www.blueidea.com/img/icon/arrow.gif> 新浪網","
http://www.sina.com.cn/","_blank")   
-->
<script>
CoolMenu1.insertmenu("0","歡迎使用X-Menu (菜單演示)<br>&nbsp; <font style='font-weight:lighter;'>Made By PuterJam</font>","","")
CoolMenu1.insertmenu("0"," ","
http://www.blueidea.com/","_blank")

CoolMenu2.insertmenu("0","<img src=http://bbs.dvbbs.net/Skins/Default/nofollow.gif> 橫向菜單","","")
CoolMenu2.insertmenu("2","<img src=http://www.blueidea.com/img/icon/arrow.gif> 新浪網","
http://www.sina.com.cn/","_blank")
CoolMenu2.insertmenu("2","<img src=http://www.blueidea.com/img/icon/arrow.gif> 我的雅虎","
http://cn.yahoo.com/","_blank")
CoolMenu2.insertmenu("2","<img src=http://www.blueidea.com/img/icon/arrow.gif> 億唐","
http://www.etang.com/","_blank")
CoolMenu2.insertmenu("2","<img src=http://www.blueidea.com/img/icon/arrow.gif> 21世紀","
http://www.21cn.com/","_blank")
CoolMenu2.insertmenu("2","<img src=http://www.blueidea.com/img/icon/arrow.gif> 遊俠網","
http://www.ali213.net/","_blank")

CoolMenu3.insertmenu("0","<img src=http://bbs.dvbbs.net/Skins/Default/nofollow.gif> 樹形菜單","","")
CoolMenu3.insertmenu("0","<img src=http://www.blueidea.com/img/common/logo.gif> ","
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:[email protected]","")
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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章