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

用DIV完美模拟createPopup 弹出窗口(脚本之家修正版),支持Firefox,ie,chrome 最近要重构公司的一个站,有一个拾色器只支持IE,不支持FIREFOX CHROME等浏览器,花了点时间对照原来的重写了个。完美实现createPopup方法的弹窗效果,欢迎大家拍砖! 立即下载

使用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"];在其他地方显示其他菜单时只要修改数组和调用时的数字就行了。  

window.createPopup() Popup窗口是IE5.5及以后版本提供的一个新feature: ·popup窗口在用户点击它自身之外的任何地方或另一个popup打开的时候会自动关闭; ·popup在显示的时候不能获得焦点,所以用户已focused的操作将继续在其父窗口中执行; ·组成popup的DHTML可以存储在其父document或其他的document元素中; ·popup窗口中不支持文本框一类的编辑框element; ... 阅读详情

相关推荐

JS 弹出层源兼容IE、FF、Chrome

function showWin(o1,o2){var mask=document.getElementById(o1);var popwin=document.getElementById(o2);//document.documentElement.scrollHeight

xiangsuixinsheng的专栏 2595

javascript---window.createPopup

在Web上使用菜单可以极大地节约页面的空间,同时也比较的符合用户从Windows上继承下来的UI操作体验。在以往的Web页菜单设计中,我们 普遍使用div嵌套table的方式来实现菜单,这样的菜单有个最致命的问题就是会被覆盖。我们为了解决这个问题,有时我们 干脆在显示图层菜单的同时隐藏页面上的所有下拉列表框,在菜单消失的时候,再显示他们。这个方法虽然可以解决问题,而其优化过后还可以只隐藏和下拉列表

Simplicity is more complicated than you think 6037

window.createPopup();

var oPopup = window.createPopup();var popTop=50;function popmsg(msgstr){var winstr="1.jpg/" >";winstr+=" ";winstr+=""+msgstr+"";oPopup.document.body.innerHTML = winstr;popshow();}function popshow(){wi

shiqiang124的专栏 2037

使用window.createPopup创建无限级跨帧下拉菜单

先帖样子     使用层或者其他技术所实现的JS菜单不能解决的问题就是这些菜单不能跨帧,也就是说在Frame之间的时候无可奈何,所幸的是IE5+提供了createPopup这个函数,可以提供窗口的创建,首先介绍下creatPopup.Popup窗口是IE5.5及以后版本提供的一个新feature:·popup窗口在用户点击它自身之外的任何地方或另一个popup打开的时候会自动关闭; ·

Beau's Sky 2181

window对象的学习(一)

window对象是javascript的内部对象,用于在浏览器上显示一个窗口。 我们平时最熟悉的alert函数就是window对象的一个方法。<!-- window.alert("hello,javascript!");// -->  除了alert弹出一个警告窗口外,window对象里的confirm弹出一个可以供用户选择"是"或"否"的的确认对话框,当然这

fableboy的学习点滴 586

跨frame显示下拉菜单

方案一(js): 参考文章:http://msdn2.microsoft.com/en-us/library/ms533025.aspx ------------------------------- 可以用window.createPopup()实现 网页跨框架菜单 from MSDN ////////////////////

nihaoma71121的专栏 4813

不被框架挡住的下拉菜单

框架优先级高于层,createPopup创建的窗口优先级高于框架,因此可以用它实现不被框架挡住的菜单。代码示例如下:  var oPopup = window.createPopup(); function showMenu() { var oPopBody = oPopup.document.body; oPopBody.style.backgroun

snow2076的专栏 3434

javascript(js),XML,DOM实现无限级下拉菜单,不会被任何标签或元素遮住

菜单的主要特性: 菜单实现的主要技术为Javascript, DOM, XML 不会被任何标签覆盖,一般的菜单会被SELECT,OBJECT等标签覆盖。 可以跨过框架,譬如一个frameset中有两个frame,上一个frame放菜单,下一个frame放具体内容,那么菜单可以悬浮于下一个frame之上。 在添加菜单数据时,通过指定父子菜单的ID来达

tiannet(曾次清)的专栏 2833

梅花雪脚本控件集:MzPopupLayer 可盖住flash的层基类

Subject: popup layer, cross browser(IE5.0+ Firefox Netscape Mozilla Opera)NameSpace:  System.Web.UI.WebControls.MzPopupLayer     网页里脚本控件的时候经常需要一个层的依托,比如自定义的右键菜单层,下拉式菜单层,模拟窗口层,日期选择录入控件层等等,这些层一般的人都是以

meizz的专栏 1万+

根据sitemap配置生成无限级跨frame菜单的实现方式(含100%脚本源码参考

在E8.Net平台中已经包含了根据Sitemap生成outlook风格菜单的全部源代码. 不过还有一些客户提出另一种下拉菜单的样式需求. 于是在E8.Net 上扩展了一种新的菜单实现模式. 如图例: 此菜单跟之前提供的outlook菜单一样来自于sitemap设置由于菜单是放在FrameSet中的一个frame上,因此弹出的子菜单不能用DIV的方式来实现,而是采用window.

spring888的专栏 346

跨帧 (frameset,freame,iframe) 的无限级菜单

跨帧 (frameset,freame,iframe) 的无限级菜单                              大家都知道在IE中,存在frameset,freame,iframe三种帧元素,他们在布局中运用广泛,而且也很实用,但是有时候使用起来还是有一些小麻烦。如你是相关框架或者是企业管理软件的,需要使用到它来布局,那他的层级是最高的,也就是说他的z-index是最高的,那就

wodetiankong516的博客 2167

一般的JavaScript菜单会被DropdownList等遮住

一般的JavaScript菜单会被DropdownList等遮住 1. 可以使用window.createPopup([Args])实现弹出菜例子     :function PopUP(){ var winPopup = window.createPopup(); winPopup.document.open(); winPopup.document.write("abc"); wi

xingxing的专栏 628

根据sitemap配置生成无限级跨frame菜单的实现方式(含100%脚本源码参考)

在E8.Net平台中已经包含了根据Sitemap生成outlook风格菜单的全部源代码. 不过还有一些客户提出另一种下拉菜单的样式需求. 于是在E8.Net 上扩展了一种新的菜单实现模式. 如图例: 此菜单跟之前提供的outlook菜单一样来自于sitemap设置 由于菜单是放在FrameSet中的一个frame上,因此弹出的子菜单不能用DIV的方式来实现,而是采...

weixin_30832351的博客 71
上一篇: 用Javascript写的一个映射表类
下一篇: 编辑Div内内容
SmartJavaer
博客等级 码龄20年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值