Diligent achievement genius ...

业精于勤荒于嬉 行成于思毁于随 voiow博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用window.createPopup();做的简单下拉菜单

Posted on 2008-01-11 10:20  voiow  阅读(546)  评论(0编辑  收藏  举报
使用window.createPopup();做的简单下拉菜单
使用层做下拉菜单或者漂浮图片的话,最大的问题就是会被输入框等挡住,更别说框架,所以现在比较流行用window.createPopup();的说,它可以在页面所有元素之上,不存在被谁遮挡的问题。

下面是刚写的一个简单的下拉菜单。代码很简单,很容易看懂,所以修改也方便。

<script language="JavaScript" type="text/JavaScript">
//首先定义两个数组,一个是菜单文字,一个是链接
var MenuText = new Array(3);
    var MenuEven = new Array(3);
    MenuText[1] = ["菜单11","菜单12","菜单13"];
    MenuText[2] = ["菜单21","菜单21"];
    MenuText[3] = ["菜单31","菜单321","菜单33"];

    MenuEven[1] = ["url11","url12","url13"];
    MenuEven[2] = ["url21","url22"];
    MenuEven[3] = ["url31","url32","url33"];
  
//初始化一个oPopup对象

var  oPopup = window.createPopup();

//这两个是获得表格绝对位置的方法,很有用的说
function getLeftIE(x,m) {
  var dx=0;
  if (x.tagName=="TD"){
    dx=x.offsetLeft;
  }
  else if (x.tagName=="TABLE") {
    dx=x.offsetLeft;
    if (m) { dx+=(x.cellPadding!=""?parseInt(x.cellPadding):2); m=false; }
  }
  return dx+(x.parentElement.tagName=="BODY"?0:getLeftIE(x.parentElement,m));
}
function getTopIE(x,m) {
  var dy=0;
  if (x.tagName=="TR"){
    dy=x.offsetTop;
  }
  else if (x.tagName=="TABLE") {
    dy=x.offsetTop;
    if (m) { dy+=(x.cellPadding!=""?parseInt(x.cellPadding):2); m=false; }
  }
  return dy+(x.parentElement.tagName=="BODY"?0:getTopIE(x.parentElement,m));
}

//显示菜单
function ButtonClick(node,t)
{  
   //首先得到鼠标所在的表格的位置
    var left = getLeftIE(node,true)-8;  
    var top = getTopIE(node,true);
//定义打开的oPopup的宽度,高度
    var width = 90;
    var height = MenuText[t].length*20;    
//清空oPopup的内容,否则每次调用都只会在后面接着写
    oPopup.document.body.innerHTML = "";
    var oPopBody = oPopup.document.body;
    oPopup.show(left,top, width, height, document.body);      
        oPopup.document.open;
//让oPopup在鼠标离开时自动隐藏。
        oPopup.document.write("<body leftmargin=0 topmargin=0 scroll=no style='border : 0 px;' onmouseover=clearTimeout(parent.popt); onmouseout=parent.popt=setTimeout('parent.oPopup.hide()',10);>");

//用document.write()写菜单内容
        oPopup.document.write("<table width=100%  height=100% style='border-collapse : collapse;'>");
    for(var i=0;i<MenuText[t].length;i++)
        {
        oPopup.document.write("<tr><td background='image/topbg.gif' bgcolor=#cccccc style='border-top : #cccccc 1px solid;border-bottom : #666666 1px solid;border-left : #cccccc 1px solid;border-right : #666666 1px solid;mouse : hand; font-size : 12px; color:#000000;text-align : left;vertical-align : center;CURSOR: hand' onmouseover=this.bgColor='#C2D2E5'; onmouseout=this.bgColor='#cccccc'; height='20' onclick='parent.parent.main.location.href=\""+MenuEven[t][i]+"\"';>"+MenuText[t][i]+"</td></tr>");
        }
        oPopup.document.write("</table></td></tr></table>");
        oPopup.document.write("</body>")
}


</SCRIPT>

主要方法就这么多,由于我使用了框架,所以菜单代码中链接打开位置是下面的框架“main"。用下面的语句调用菜单显示方法ButtonClick()
          
              <td align="left" onMouseOver="ButtonClick(this,1)">菜单1</td>

在此点击鼠标,菜单就会在此格的上面出现。菜单内容是上面那个数组    MenuText[1] = ["菜单11","菜单12","菜单13"];在其他地方显示其他菜单时只要修改数组和调用时的数字就行了。