我的组件发布:菜单树1.0
要在INTERNET EXPLORER5。0以上才能正常。
请到lostinet.oso.com.cn/public/查看效果
这个组件的使用者不需任何的JS知识。
只要按照规定的格式写就行。
第一,在内容的前面加
<script src="menutree.js">
<style>
span.menutree_option,span.menutree_content {position:absolute;visibility:hidden}
</style>
第二,内容的写法为
<span class="menutree_title">
这里填标题内容
<span class="menutree_option">direction=right</span>
<span class="menutree_content">
这里填弹出的内容,不过如果层叠了一定要先定义好宽度
</span>
</span>

这个结构是可以层叠的。其中要注意menutree_title,menutree_option,menutree_content有没有写正确,不要求分大小写
span的层叠就是“菜单”的层叠了。
menutree_option下的选项为
direction 弹出的方向,值可以是 left,right,up,down
clickpopup true表示按了才弹出,其他情况自动弹出。


文件如下
<!--------------------------------menutree.js--------------------------------------->

/********************************************************************************************************************************\++++++++
作者:迷失网络[email protected]
版本:1.01修正了链接不能正常使用的BUG
版权:归[email protected]所有。
说明:
如果一个Tile下有多个Content,只显示最后一个Content
如果一个Tile下有多个Option,只使用最后一个Option
如果一个Option下有多个同名设定,只使用最后一个设定
选项String
direction :down,up,left,right
clickpopup :true,false
\********************************************************************************************************************************/

var MenuTree_StringSplitOption=";";
var MenuTree_StringSplitSet="=";
var MenuTree_StringStyle="<style>"

+ " Span.MenuTree_Title {cursor:default} "
+ " Span.MenuTree_Option {position:absolute;visibility:hidden;left:0;top:0} "
+ " Span.MenuTree_Content {cursor:auto;padding:4;position:absolute;visibility:hidden;left:0;top:0;border-width:1;border-style:outset;background-color:burlywood} "

+"</style>";
var MenuTree_ArrayItem=new Array();
var MenuTree_ArrayTitleMapIndex=new Array();
var MenuTree_ArrayPopup=new Array();
var MenuTree_CurrentPopup=null;

document.write(MenuTree_StringStyle);

window.attachEvent("onload",MenuTree_ContructAll);
document.attachEvent("onclick",MenuTree_Document_OnClick);

/****************************************************************\++++
Class
\****************************************************************/
function MenuTree_MenuItem()
{
this.Title=null;
this.Content=null;
this.IsPopup=false;
this.Option=new MenuTree_MenuOption();
}
function MenuTree_MenuOption()
{
this.Text="";
this.Direction="down";
this.ClickPopup=false;

this.SetOptionByText=MenuTree_MenuOption_SetOptionByText;
function MenuTree_MenuOption_SetOptionByText()
{
var ArrayOption=this.Text.toLowerCase().replace(" ","").replace("\t","").split(MenuTree_StringSplitOption);
for(var i=0;i<ArrayOption.length;i++)
{
var ArrayEntry=ArrayOption[i].split(MenuTree_StringSplitSet);
if(ArrayEntry.length!=2)continue;
switch(ArrayEntry[0])
{
case "direction":
switch(ArrayEntry[1])
{
case "left":
case "right":
case "up":
case "down":
this.Direction=ArrayEntry[1];
break;
default:
this.Direction="down";
}
break;
case "clickpopup":
switch(ArrayEntry[1])
{
case "true":
this.ClickPopup=true;
break;
default:
this.ClickPopup=false;
}
break;
}
}
}
}
/****************************************************************\----
Class
\****************************************************************/

/****************************************************************\++++
Function
\****************************************************************/

function MenuTree_PopupList_Add(Item)
{
Item.IsPopup=true;
MenuTree_ArrayPopup[Item.Title.uniqueID]=Item.Title.uniqueID;
}
function MenuTree_PopupList_Del(Item)
{
Item.IsPopup=false;
delete MenuTree_ArrayPopup[Item.Title.uniqueID];
}
function MenuTree_IsParentContainer(Parent,Object)
{
if(!Object)return false;
try
{
var o=Object;
while(o=o.parentElement)
{
if(o==Parent)return true;
}
}catch(x){return false;}
return false;
}
function MenuTree_GetContainer(Object,ClassName)
{
if(!Object)return false;
var o=Object;
while(o=o.parentElement)
{
if(
MenuTree_ObjectIsClass(o,ClassName)
)return o;
}
return false;
}
function MenuTree_GetSourceElement(Object,ClassName)
{
if(!Object)return false;
var o=Object;
do
{
if(
MenuTree_ObjectIsClass(o,ClassName)
)return o;
}while(o=o.parentElement);
return false;
}
function MenuTree_ObjectIsClass(Object,ClassName)
{
try
{
if(Object.tagName.toLowerCase()=="span"&&Object.className.toLowerCase()==ClassName.toLowerCase())
return true;
}catch(x){return false;}
return false;
}
/********************************\++++
Function-Popup
\********************************/
function MenuTree_PopupContent(oTitle)
{
if(!oTitle)return false;
var oParentTitle=MenuTree_GetContainer(oTitle,"MenuTree_Title");
var oParentContent=MenuTree_GetContainer(oTitle,"MenuTree_Content");
if(oParentTitle)
{
if(MenuTree_ArrayPopup[oParentTitle.uniqueID])
{
MenuTree_CloseChildContent(oParentTitle);
return MenuTree_PopupThisContent(oTitle);
}
MenuTree_PopupContent(oParentTitle);
MenuTree_CloseChildContent(oParentTitle);
}
else
{
MenuTree_CloseAllContent();
}
MenuTree_PopupThisContent(oTitle);
}

function MenuTree_PopupThisContent(oTitle,x,y)
{
try
{
var Item=MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]];
var o=Item.Title;
var l=0;
var t=0;
do
{
if(o.currentStyle.position.toLowerCase()=="absolute")
break;
l+=o.offsetLeft;
t+=o.offsetTop;
}while(o=o.offsetParent);
if(x)l=x;
if(y)t=y;
switch(Item.Option.Direction)
{
case "left":
Item.Content.style.pixelLeft=l-Item.Content.offsetWidth;
Item.Content.style.pixelTop=t;
break;
case "right":
Item.Content.style.pixelLeft=l+Item.Title.offsetWidth-7;//I don't know why there have 7 between.....
Item.Content.style.pixelTop=t;
break;
case "up":
Item.Content.style.pixelLeft=l;
Item.Content.style.pixelTop=t-Item.Content.offsetHeight;
break;
case "down":
Item.Content.style.pixelLeft=l;
Item.Content.style.pixelTop=t+Item.Title.offsetHeight;
default:
}
var oParentContent=MenuTree_GetContainer(o);
if(oParentContent)
Item.Content.style.zIndex=oParentContent.currentStyle.zIndex+1;
Item.Content.style.visibility="visible";
MenuTree_PopupList_Add(Item);
MenuTree_CurrentPopup=oTitle;
return true;
}catch(x){return false;}
return false;
}
/********************************\----
Function-Popup
\********************************/
/********************************\+++++
Function-Close
\********************************/
function MenuTree_CloseAllContent()
{
for(var i in MenuTree_ArrayPopup)
{
Item=MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[MenuTree_ArrayPopup[i]]];
MenuTree_CloseThisContent(Item.Title);
}
MenuTree_CurrentPopup=false;
}
/*
function MenuTree_CloseContent(oTitle)
{
if(!oTitle)return false;

}
*/

function MenuTree_CloseThisContent(oTitle)//Private Function-For MenuTree_CurrentPopup Not Set...
{
if(!oTitle)return false;
try
{
MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]].Content.style.visibility="hidden";
MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]].Content.style.pixelLeft=0;
MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]].Content.style.pixelTop=0;
MenuTree_PopupList_Del(MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]]);

}catch(x){return false;}
return true;
}
function MenuTree_CloseChildContent(oTitle)
{
if(!oTitle)return false;
for(var i in MenuTree_ArrayPopup)
{
Item=MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[MenuTree_ArrayPopup[i]]];
if(MenuTree_IsParentContainer(oTitle,Item.Title))
MenuTree_CloseThisContent(Item.Title);
}
MenuTree_CurrentPopup=false;
}
/********************************\----
Function-Close
\********************************/
function MenuTree_ConstructMenu(oTitle)
{
if(!MenuTree_ObjectIsClass(oTitle,"MenuTree_Title"))return false;
if(typeof(MenuTree_ArrayTitleMapIndex[oTitle.uniqueID])!="undefined")return false;
var index=MenuTree_ArrayItem.length;
MenuTree_ArrayItem[index]=new MenuTree_MenuItem();
MenuTree_ArrayItem[index].Title=oTitle;
MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]=index;

for(var j=0;j<oTitle.childNodes.length;j++)
{
var oChild=oTitle.childNodes.item(j);
if(MenuTree_ObjectIsClass(oChild,"MenuTree_Content"))
{
MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]].Content=oChild;
oChild.attachEvent("onclick",MenuTree_Content_OnMouseClick);
}
if(MenuTree_ObjectIsClass(oChild,"MenuTree_Option"))
{
MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]].Option.Text=oChild.innerText.replace(" ","").replace("\t","");
MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]].Option.SetOptionByText();
}
}

oTitle.attachEvent("onmouseover",MenuTree_Title_OnMouseOver);
oTitle.attachEvent("onclick",MenuTree_Title_OnMouseClick);

return true;
}
/****************************************************************\----
Function
\****************************************************************/

function MenuTree_Document_OnClick()
{
if(MenuTree_CurrentPopup)MenuTree_CloseAllContent();
}
function MenuTree_ContructAll()
{
var allSpan=document.all.tags("SPAN");
var length=allSpan.length;
var oSpan=null;
for(var i=0;i<length;i++)
{
oSpan=allSpan.item(i);
if(!MenuTree_ObjectIsClass(oSpan,"MenuTree_Title"))continue;
MenuTree_ConstructMenu(oSpan);
}
}
function MenuTree_Title_OnMouseOver()
{
var oTitle,Item,oContent;
if(!(oTitle=MenuTree_GetSourceElement(event.srcElement,"MenuTree_Title")))return false;
if(oContent=MenuTree_GetSourceElement(event.srcElement,"MenuTree_Content"))
{
if(MenuTree_IsParentContainer(oTitle,oContent))
{
event.cancelBubble=true;
return event.returnValue=false;
}
}
if(!(Item=MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]]))return false;
if(!Item.Option.ClickPopup)
{
MenuTree_PopupContent(oTitle);
}
}
function MenuTree_Title_OnMouseClick()
{
var oTitle,Item;
if(!(oTitle=MenuTree_GetSourceElement(event.srcElement,"MenuTree_Title")))return false;
if(!(Item=MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]]))return false;
if(Item.Option.ClickPopup)
{
MenuTree_PopupContent(oTitle);
}
// event.returnValue=false;
event.cancelBubble=true;
}
function MenuTree_Content_OnMouseClick()
{
event.cancelBubble=true;
/*
var oTitle,Item;
if(!(oTitle=MenuTree_GetSourceElement(event.srcElement,"MenuTree_Title")))return false;
if(!(Item=MenuTree_ArrayItem[MenuTree_ArrayTitleMapIndex[oTitle.uniqueID]]))return false;
MenuTree_PopupContent(oTitle);
*/
}
/********************************************************************************************************************************\--------
End-Script
\********************************************************************************************************************************/



<!-------------------------------------menutree.html-------------------------------------->




<head>
<style>
span.menutree_content { position: absolute; visibility: hidden }
span.menutree_option { position: absolute; visibility: hidden }
body {background-color:ghostwhite;color:midnightblue}
a {text-decoration:none;color:mediumblue}
a:hover {text-decoration:underline;color:snow}
a.anchor:hover {color:lime}
.anchor {color:mediumblue}
</style>
<script src=menutree.js>

</script>
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
</head>

<body>
<a class=anchor href=http://yeahboy.oso.com.cn><span class=anchor style="font-size:26">http://yeahboy.oso.com.cn</span></a><br>
<a class=anchor href=http://lostinet.oso.com.cn><span class=anchor style="font-size:26">http://lostinet.oso.com.cn</span></a>
<p>
<span id=title1 class="menutree_title">友情链接 <span class="menutree_option">clickpopup=false</span> <span class="menutree_content"><span class="menutree_title"><span class="highlight">同学的
&gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">同学1的主页</a><br>
<a href="http://">同学2的主页</a><br>
<a href="http://">同学3的主页</a><br>
<a href="http://">同学4的主页</a><br>
<span class="menutree_title">友情链接 <span class="menutree_option">clickpopup=false</span> <span class="menutree_content"><span class="menutree_title"><span class="highlight">同学的
&gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">同学1的主页</a><br>
<a href="http://">同学2的主页</a><br>
<a href="http://">同学3的主页</a><br>
<a href="http://">同学4的主页</a><br>
</span></span><br>
<span class="menutree_title"><span class="highlight">网友的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">网友1的主页</a><br>
<a href="http://">网友2的主页</a><br>
<a href="http://">网友3的主页</a><br>
<a href="http://">网友4的主页</a><br>
</span></span><br>
<span class="menutree_title"><span class="highlight">相关的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">公司1的主页</a><br>
<a href="http://">公司2的主页</a><br>
<a href="http://">公司3的主页</a><br>
<a href="http://">公司4的主页</a><br>
</span></span></span></span>
</span></span><br>
<span class="menutree_title"><span class="highlight">网友的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">网友1的主页</a><br>
<a href="http://">网友2的主页</a><br>
<a href="http://">网友3的主页</a><br>
<a href="http://">网友4的主页</a><br>
</span></span><br>
<span class="menutree_title"><span class="highlight">相关的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">公司1的主页</a><br>
<a href="http://">公司2的主页</a><br>
<a href="http://">公司3的主页</a><br>
<a href="http://">公司4的主页</a><br>
</span></span></span></span>
<span class="menutree_title">友情链接 <span class="menutree_option">clickpopup=false</span> <span class="menutree_content"><span class="menutree_title"><span class="highlight">同学的
&gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">同学1的主页</a><br>
<a href="http://">同学2的主页</a><br>
<a href="http://">同学3的主页</a><br>
<a href="http://">同学4的主页</a><br>
</span></span><br>
<span class="menutree_title"><span class="highlight">网友的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">网友1的主页</a><br>
<a href="http://">网友2的主页</a><br>
<a href="http://">网友3的主页</a><br>
<a href="http://">网友4的主页</a><br>
</span></span><br>
<span class="menutree_title"><span class="highlight">相关的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">公司1的主页</a><br>
<a href="http://">公司2的主页</a><br>
<a href="http://">公司3的主页</a><br>
<a href="http://">公司4的主页</a><br>
<span class="menutree_title">友情链接 <span class="menutree_option">clickpopup=false</span> <span class="menutree_content"><span class="menutree_title"><span class="highlight">同学的
&gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">同学1的主页</a><br>
<a href="http://">同学2的主页</a><br>
<a href="http://">同学3的主页</a><br>
<a href="http://">同学4的主页</a><br>
</span></span><br>
<span class="menutree_title"><span class="highlight">网友的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">网友1的主页</a><br>
<a href="http://">网友2的主页</a><br>
<a href="http://">网友3的主页</a><br>
<a href="http://">网友4的主页</a><br>
</span></span><br>
<span id=lastmenu class="menutree_title"><span class="highlight">相关的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">公司1的主页</a><br>
<a href="http://">公司2的主页</a><br>
<a href="http://">公司3的主页</a><br>
<a href="http://">公司4的主页</a><br>
</span></span></span></span>
</span></span></span></span>




<span id=titleCM class="menutree_title" style="visibility:hidden;position:absolute;left:0;top:0">
<span class="menutree_content" style="width:86"><span class="menutree_title"><span class="highlight">同学的
&gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">同学1的主页</a><br>
<a href="http://">同学2的主页</a><br>
<a href="http://">同学3的主页</a><br>
<a href="http://">同学4的主页</a><br>
</span></span><br>
<span class="menutree_title"><span class="highlight">网友的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">网友1的主页</a><br>
<a href="http://">网友2的主页</a><br>
<a href="http://">网友3的主页</a><br>
<a href="http://">网友4的主页</a><br>
</span></span><br>
<span class="menutree_title"><span class="highlight">相关的 &gt;&gt;</span> <span class="menutree_option">direction=right</span> <span class="menutree_content" style="width:100">
<a href="http://">公司1的主页</a><br>
<a href="http://">公司2的主页</a><br>
<a href="http://">公司3的主页</a><br>
<a href="http://">公司4的主页</a><br>
</span>
</span>
</span></span></span>

<p>m
<p>e
<p>n
<p>u
<p>t
<p>r
<p>e
<p>e


<span class="menutree_title" style="cursor:hand">
标题。。。
<span class="menutree_option">direction=right;clickpopup=true</span>

 <span class="menutree_content" style="width:200;height:150">
 这里放什么都可以啊。。。不过要注意宽度。。和高度

 <span class="menutree_title" style="cursor:hand;color:red">
  标题。。。
  <span class="menutree_option">direction=down;clickpopup=false</span>
  <span class="menutree_content" style="width:200;height:150">
  span的重叠就是菜单的重叠了。要注意menutree_option的不同。
  和样式的继承
  </span>
 </span><br>

 <span class="menutree_title" style="cursor:hand">
  <span style="color:lime">标题。。。 </span>
  <span class="menutree_option">direction=down;clickpopup=false</span>
  <span class="menutree_content" style="width:200;height:150;background-color:steelblue">
  span的重叠就是菜单的重叠了。要注意menutree_option的不同。
  和样式的继承
  </span>
 </span>


 </span>
</span>
</span>

</body>
<script>
function document.oncontextmenu()
{
MenuTree_CloseAllContent();
MenuTree_PopupThisContent(titleCM,document.body.scrollLeft+event.clientX,document.body.scrollTop+event.clientY);
event.cancelBubble=true;
return event.returnValue=false;
}
function document.onkeypress()
{
MenuTree_PopupContent(lastmenu);
}
ts=document.all.tags("SPAN");
for(i=0;i<ts.length;i++)
{
if(ts.item(i).className.toLowerCase()=="highlight")
{
ts.item(i).attachEvent("onmouseover",otmover);
ts.item(i).attachEvent("onmouseout",otmout);
}
}
function otmover()
{
event.srcElement.style.backgroundColor="lightsteelblue";
}
function otmout()
{
event.srcElement.style.backgroundColor="";
}
</script>