您的位置: 首页 > 技术文档 > 网页制作 > 用Popup窗口建无限级Web页菜单
回到列表 JavaScript实用的一些技巧
用户名:
密 码: 忘记密码
注册会员 游客参观 论坛帮助
 用Popup窗口建无限级Web页菜单

作者:birdshome 时间: 2005-02-22 文档类型:原创 来自:蓝色理想
浏览统计 total:1996 | year:1996 | Quarter:1996 | Month:498 | Week:21 | today:21

在Web上使用菜单可以极大地节约页面的空间,同时也比较的符合用户从Windows上继承下来的UI操作体验。在以往的Web页菜单设计中,我们普遍使用div嵌套table的方式来实现菜单,这样的菜单有个最致命的问题就是会被<select>覆盖。我们为了解决这个问题,有时我们干脆在显示图层菜单的同时隐藏页面上的所有下拉列表框,在菜单消失的时候,再显示他们。这个方法虽然可以解决问题,而其优化过后还可以只隐藏和下拉列表框相交的列表框,但是这些解决方法都不是十分的完美。还有些小问题,这样的菜单定位很困难,因为在<div>显示的时候,用户可以使用鼠标滚轮滚动页面,这样一来是否要让<div>菜单和页面滚动同步呢?如果不要,页面被滚走了,菜单仍显示在一个和自己毫不相关的位置上很是古怪。如果要同步,那么噩梦就来了,因为被滚动的区域不一定就是<body>区域,还可能是一些类似<div style="overflow:auto"><div>的区域,要算出菜单的位置将会非常的麻烦。 

下面将介绍的Popup来实现的Web页菜单将完全解决<div>做为菜单容器时遇到的问题,Popup窗口是IE5.5及以后版本提供的一个新feature。什么是popup呢?简单说popup其实就是一个弹出窗口,它拥有以下特点(MSDN描述):

·popup窗口在用户点击它自身之外的任何地方或另一个popup打开的时候会自动关闭;

·popup在显示的时候不能获得焦点,所以用户已focused的操作将继续在其父窗口中执行;

·组成popup的DHTML可以存储在其父document或其他的document元素中;

·popup窗口中不支持文本框一类的编辑框element;

·不能选中popup窗口中的元素;

·不能在popup窗口中navigate(点击popup中的连接,不能让更新的内容显示到这个popup中); 

·popup窗口一旦显示就不能移动和resize。

这里MSDN说的不全,而且有的地方不是很准确,popup窗口还有几个重要的特性。它可以超出浏览器的窗口范围而且也不会被下拉框、flash、IFrame等这些元素遮挡。实际上popup里的内容是可以被选择的,不知道MSDN说的不能选择是啥意思?。关于MSDN说popup不能获得焦点也有点问题,其实是popup里的编辑框类控件不能获得焦点,而其它的非可编辑控件是可以获得焦点的。而且popup显示的时候,IE主窗口不能获得鼠标的onmousewheel事件。 

这样的一些特性,恰好表明了popup窗口非常的适合用来制作弹出菜单,并且由于popup窗口显示的时候,IE窗口内的文档是不能被移动的,这样就不存在context menu的位置同步问题了,因为毕竟popup窗口不能move(move位置需要hide以后在新的位置上重show),这个问题还比较讨厌。

使用popup窗口制作无限级别的菜单,有两个问题要解决:一个是要能在一个IE中显示多个Popup窗口,二是要能把窗口中的一些事件俘获并执行我们脚本过程。MSDN在描述popup窗口特性时,第一条就说了只要有另一个popup窗口开启,先前显示的popup窗口就会自动关闭。这下怎么办呢?不过既然都说了要实现无限级的菜单了,办法还是有的。对于popup,使用方式其实是很简单的,他一共就只包含了两个方法:hide()和show(...),和两个属性:document和isOpen。虽然在IE中我们连续的调用n次window.createPopup().show(...)只能出来一个popup窗口被显示,可是我们可以调用popup.document.parentWindow的createPopup方法,它产生的popup窗口在显示的时候就不会关闭前面已显示的popup窗口,并且对于新的popup用这个方法可以继续开启child popup。这个问题再研究下去,会发现IE实现popup的一些怪异的地方(当然这些对于我们实现这个菜单关系不太大,只是觉得混乱)。

比如我们在一个IE窗口中,var popup = window.createPopup(); var win = popup.document.parentWindow; 我们会发现 window != win,对于多个popup可以共存,这个不相等还能理解,但是当我们调用win.resizeTo(...)的时候,我们发现父IE窗口被resize了。同样我们在popup中select all,结果也是父IE窗口里的内容被全选了@_@...

(未完待续)

出处:蓝色理想
责任编辑:冰点的冰蓝色

相关文章
关于版权声明的写法
在Web页中使用Media Player
为flash构建asp.net Webservice
作者文章
用Popup窗口建无限级Web页菜单
范围:全网 本站
推荐使用
站内搜索
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 Dreamweaver 2004 Flash
站点最新 站点最新列表
FlashForward 2005 入围名单
Flash dynamic mask 动态遮罩
漫画绘制教程《漫画肖像》 II
漫画绘制教程《漫画姚明》
Flash Lite 与 J2ME 分析比较
《上海酷:创意再生产》艺术展
漫画绘制教程《漫画功夫》
浏览器弹出窗口到底怎样使用?
Flash MX 2004 video
Flash的Debug程序AdminTool
栏目最新 栏目最新列表
Flash dynamic mask 动态遮罩
Flash Lite 与 J2ME 分析比较
浏览器弹出窗口到底怎样使用?
Flash MX 2004 video
Flash ActionScript 2.0 基础教程
flash 打开我的文档等特殊文件夹
用Popup窗口建无限级Web页菜单
浅谈全景摄影的硬件配置与要点
基于 as1.0 的挡板游戏-oop篇
SQL 语法参考手册

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文暂时没有评论和评分

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误