无限级别的菜单(侧拉菜单)

本文介绍了一个使用HTML和JavaScript实现的导航菜单案例,该菜单具备多级子菜单,并通过JavaScript控制菜单的显示与隐藏,实现良好的交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<title>我的导航菜单</title>
<style>
body{
font-size:12px
}
</style>
<scriptlanguage="javascript">
//filter:shadow(color=#aaaaaa,direction=135)
varitemsNum=0;
vardisplayFlags='block';
functionmenu(menuId,menuWidth,menuHeight,menuTop,menuLeft,itemBranchNum,parentMenuId){
this.itemBranchs=newArray();
this.width=menuWidth;
this.height=menuHeight;
this.top=menuTop;
this.left=menuLeft;
this.itemBranchNum=itemBranchNum;
this.parentMenuId=parentMenuId;
this.displayFlags=displayFlags;
//this.parenItemId=parenItemId;
this.menuId=menuId;
this.add=addItemBranch;
this.writeMenu=writeMenu;

this.setTop=setMenuTop;
this.setLeft=setMenuLeft;
this.setWidth=setMenuWidth;
this.setHeight=setMenuHeight;
itemsNum=0;
}

functionsetMenuTop(top){
this.top=top;
}

functionsetMenuLeft(left){
this.left=left
}

functionsetMenuWidth(width){
this.width=width
}

functionsetMenuHeight(height){
this.height=height
}

functionaddItemBranch(itemBranch){
this.itemBranchs[itemsNum]=itemBranch
varcuttrutItemHeigt=(this.height)/this.itemBranchNum;
varcuttrutItemWidth=this.width;
varcuttrutItemTop=cuttrutItemHeigt*itemsNum-1;
varcuttrutItemLeft=-1;
itemBranch.setTop(cuttrutItemTop);
itemBranch.setLeft(cuttrutItemLeft);
itemBranch.setWidth(cuttrutItemWidth);
itemBranch.setHeight(cuttrutItemHeigt);
itemsNum++;
//alert(itemBranch.top+"--"+itemBranch.left+"--"+itemBranch.width+"--"+itemBranch.height)
//alert(this.itemBranchs.length)
}

functionwriteMenu(){
varmenuWidth=this.width;
varmenuHeight=this.height;
varmenuTop=this.top;
varmenuLeft=this.left;
varmenuId=this.menuId;
varparentMenuId=this.parentMenuId;
varmenuString='';
menuString+='<divid="'+menuId+'"style="position:absolute;width:'+menuWidth+'px;height:'+menuHeight+'px;top:'+menuTop+'px;left:'+menuLeft+'px;display:'+this.displayFlags+';background:#999999"onMouseOver="keepSubMenu(this,\''+parentMenuId+'\')"onmouseout="removeSubMenu(this,\''+parentMenuId+'\')">'
varnums=this.itemBranchs.length;
for(vari=0;i<nums;i++){
menuString+=this.itemBranchs[i].writeItemBranch();
}
menuString+='</div>'
document.write(menuString);
}

functionitemBranch(itemId,subMenuId,name,link,parentObj){
this.subMenu=newObject();
this.name=name;
this.link=link;
this.parentObj=parentObj;
this.itemId=itemId;
this.subMenuId=subMenuId;
this.width=0;
this.height=0;
this.top=0;
this.left=0;
this.setTop=setItemTop;
this.setLeft=setItemLeft;
this.setWidth=setItemWidth;
this.setHeight=setItemHeight;
this.writeItemBranch=writeItemBranch;
this.add=addSubMenu;
}

functionwriteItemBranch(){
varitemStr='';
varlink=this.link;
if(link==''){
itemStr+='<divid="'+this.itemId+'"style="position:absolute;width:'+this.width+'px;height:'+this.height+'px;top:'+this.top+'px;left:'+this.left+'px;border:1pxsolid#000000;background:#ffffff;cursor:hand;"onmouseover="showSubMenu(\''+this.subMenuId+'\')"onmouseout="hiddenSubMenu(\''+this.subMenuId+'\')">';
itemStr+='<spanstyle="float:left;margin:5px">'+this.name+'</span>'
itemStr+='<spanstyle="float:right;margin:5px;font-family:Webdings">8</span>'
itemStr+='</div>';
}else{
itemStr+='<divid="'+this.itemId+'"style="position:absolute;width:'+this.width+'px;height:'+this.height+'px;top:'+this.top+'px;left:'+this.left+'px;border:1pxsolid#000000;background:#009033">';
itemStr+='<spanstyle="float:left;margin:5px"><ahref="'+link+'">'+this.name+'</a></span>'
itemStr+='</div>';
}

returnitemStr;
}

functionshowSubMenu(obj){
varobjSubMenu=document.getElementById(obj).style;
objSubMenu.display='block'
}

functionhiddenSubMenu(obj){
document.getElementById(obj).style.display='none';
}

functionkeepSubMenu(obj,parentId){
obj.style.display='block';
if(parentId!=''){
document.getElementById(parentId).style.display='block';
}else{
//
}
}

functionremoveSubMenu(obj,parentId){
if(parentId==''){
//
}else{
if(obj.id!="mainMain"){
obj.style.display='none';
}
if(parentId!="mainMain"){
document.getElementById(parentId).style.display='none';
}
}
}

functionaddSubMenu(subMenuObj){
this.subMenu=subMenuObj
vartop=this.parentObj.top+this.top;
varwidth=subMenuObj.width;
varleft=this.parentObj.left+this.width;
varheight=subMenuObj.height;
subMenuObj.displayFlags='none';
subMenuObj.setTop(top);
subMenuObj.setLeft(left);
subMenuObj.setWidth(width);
subMenuObj.setHeight(height);
subMenuObj.writeMenu();
//subMenuObj.style.diplay='none'
//alert(left);
//alert(subMenuObj.width)
}

functionsetItemTop(top){
this.top=top;
}

functionsetItemLeft(left){
this.left=left;
}

functionsetItemWidth(width){
this.width=width;
}

functionsetItemHeight(height){
this.height=height;
}



</script>
</head>
<body>
<scriptlanguage="javascript">
/*
建立菜单的规则,菜单的内容要一组一组的写,要有顺序。
例如:
先建立一个主菜单,menu是一个对象,在建立对象的时候,必须生成一个实例;
菜单实例里面有几个参数,分别是:菜单的id、菜单的宽度(menuWidth)、菜单的高度(menuHeight)、
菜单的纵坐标(menuTop)、菜单的横坐标(menuLeft)和含有子菜单的个数(这个的主要作用是将菜单的高度按子项平分,
最后把这个平分之后的值作为子项的高度)
注意:如果是主菜单,那么这四项就必须全部填写。如果是子菜单,那么纵坐标和横坐标可以填写任意值
varmainMenu=newmenu('',100,100,50,100,5);

菜单里面的子项也是一个对象,所以在添加之前也必须先生成实例。
子项的参数有itemId(子项的id),subMenuId(添加子菜单的id),name(子项显示的名字),link(子项的连接),parentObj(子项的父菜单的对象)
*/
varmainMain=newmenu('mainMain',100,100,50,50,4,'');
varitemBranch_1=newitemBranch('itemBranch_1','subMenu_1','考试类','',mainMain);//*********itemBranch_1
varitemBranch_2=newitemBranch('itemBranch_2','subMenu_2','娱乐类','',mainMain);//**********itemBranch_2
mainMain.add(itemBranch_1);
mainMain.add(itemBranch_2);
mainMain.add(newitemBranch('','','知识技能类','http://www.baidu.com',null));
mainMain.add(newitemBranch('','','交互类','http://www.baidu.com',null));
mainMain.writeMenu();

//二级菜单
varsubMenu_1=newmenu('subMenu_1',100,100,50,50,4,'mainMain');
varitemBranch_3=newitemBranch('itemBranch_3','subMenu_1_1','知识技能类','',subMenu_1)//************itemBranch_3
subMenu_1.add(itemBranch_3);
subMenu_1.add(newitemBranch('','','交互类','http://www.baidu.com',null));
subMenu_1.add(newitemBranch('','','知识技能类','http://www.baidu.com',null));
subMenu_1.add(newitemBranch('','','交互类','http://www.baidu.com',null));
itemBranch_1.add(subMenu_1);

varsubMenu_2=newmenu('subMenu_2',100,100,50,50,5,'mainMain');
subMenu_2.add(newitemBranch('','','知识技能类','http://www.baidu.com',null));
subMenu_2.add(newitemBranch('','','交互类','http://www.baidu.com',null));
subMenu_2.add(newitemBranch('','','知识技能类','http://www.baidu.com',null));
subMenu_2.add(newitemBranch('','','交互类','http://www.baidu.com',null));
subMenu_2.add(newitemBranch('','','交互类','http://www.baidu.com',null));
itemBranch_2.add(subMenu_2);

//三级菜单

varsubMenu_1_1=newmenu('subMenu_1_1',100,100,50,50,4,'subMenu_1');
subMenu_1_1.add(newitemBranch('','','知识技能类','http://www.baidu.com',null));
subMenu_1_1.add(newitemBranch('','','交互类','http://www.baidu.com',null));
subMenu_1_1.add(newitemBranch('','','知识技能类','http://www.baidu.com',null));
subMenu_1_1.add(newitemBranch('','','交互类','http://www.baidu.com',null));
itemBranch_3.add(subMenu_1_1);
</script>

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值