JavaScript一点也不简单—实现“跨Frame的层模拟菜单”的方法(译文)

//文章译者:心晴(欢迎转载,希望转载前通知一声:brothercat@126.com

//文章来源:http://www.yxscripts.com/menuG4/examples/example2.html

实现效果:用层模拟的菜单跨越Frame(翻译成框架可能不标准,所以还是用Frame)显示出来。

基本思想:Frame、层、样式、JS来实现效果。

译文如下:

“跨Frame的层模拟菜单”最简单的一种情况应该是同一个Frameset下有兄弟两个frame,例如:top-bottom型或left-right型的,你只需照以下步骤来实现这种菜单效果:

1.在Frameset页里,为了实现层菜单效果我们需要给兄弟两个frame命名。

2.像平时设计(JS)菜单一样,我们首先需要设计出菜单的内容和样式(以下默认菜单都架设在top-frame里)。

3.将设计好的菜单放在靠近frame边沿的地方(一般来说:我们事先准备好菜单样式将为你省事不少)。

4.将菜单的链接设置为连接到bottom-frame里。

5.像平常一样写好path.js的代码。

6.在Frameset页里嵌入两个JS文件:路径脚本path.js和传递脚本menuG4Loaderfs.js

7.在top-frame页里嵌入控制frame的脚本menuG4f.js

8.在top-frame页HTML代码的<body>里添加onload事件,如:οnlοad="initMenu('instance-name', 'top'); setSubFrame('instance-name', parent.main)"

例如,以下是top-bottom型Frameset页面里的代码:

 

<html>

<head>
<script language="javascript" src="path.js"></script>
<script language="javascript" src="..script-path../menuG4Loaderfs.js"></script>
</head>

<frameset rows="60, *" border="0" frameborder="0">
<frame src="top.html" border="0" frameborder="0" scroll="no"></frame>
<frame src="bottom.html" name="main"></frame>
</frameset>

</html>

接着是top-frame页的代码如下:(我们将其命名为top.html)

<html>

<head>
<script language="javascript" src="..script-path../menuG4f.js"></script>
</head>

<body οnlοad="initMenu('instance-name', 'top'); setSubFrame('instance-name', parent.main)">
...
</body>

</html>

以上就是我们实现“跨Frame的层模拟菜单”的步骤,如果还有疑问可以到FAQ去查找更多细节。

值得一提的是:在设计过程中你需要注意菜单的形式和子菜单弹出的方向。一般来讲,如果是top-bottom型的框架,我们会将菜单放在top-frame页面里(即top.html),设置子菜单的弹出形式为right-down(先向下弹出再向右展开),要是将菜单放在bottom-frame里(即bottom.html),我们则会设置子菜单成right-up(先向上弹出再向右展开,就是windows里的“开始”菜单类型);如果是left-right型的框架,我们会先在框架上面垫起一个菜单(这儿翻译的可能不准确,原文是:If it's a left-right layout, set the top-menu as menu pad (or just ignore to take the default)),然后在left-frame页里将子菜单弹出形式做成right-down或者在right-frame页里将其做成left-down的样式。

同样,如果你想使用事先写好的菜单样式,可以参见以下我们为你提供的各种对齐方式的菜单:

frameset layouttop-menu frameslot to usealignmentsample
top-bottom型top6align:left; valign:bottomgo
5align:center; valign:bottomgo
4align:right; valign:bottomgo
bottom0align:left; valign:topgo
1align:center; valign:topgo
2align:right; valign:topgo
left-right型left2align:right; valign:topgo
3align:right; valign:middlego
4align:right; valign:bottomgo
right0align:left; valign:topgo
7align:left; valign:middlego
6align:left; valign:bottomgo

这些提供的菜单样式分别分部在window/frame的不同边沿位置:

0

12345678

接下来,我们看看其它更复杂形式的frameset页面里如何设置模拟菜单的,如下top&left-right型frameset页的代码:

<frameset rows="60, *" border="0" frameborder="0">
<frame src="top.html" border="0" frameborder="0" scroll="no"></frame>
<frameset cols="200, *" border="0" frameborder="0">
<frame src="left.html" border="0" frameborder="0" scroll="no"></frame>
<frame src="right.html" name="main"></frame>
</frameset>
</frameset>
在这个top&left-right型的frameset页里,我们分别在top-frame(即top.html)和left-frame(即left.html)里放
上菜单,它们都会在right-frame页里显示弹出的子菜单。
至于应该怎么放,我们只需将要放置在top-frame里的菜单照上面讲过的“top-bottom型的放置方法”放置,而
left-frame里的菜单照“left-right型的放置方法”放置就可以了。
有一点要注意的是,在这种top&left-right型框架里的top-frame和right-frame里同时放置菜单,我们假定放置在
top-frame页里的菜单是放置在最左边的,而事实是,top-frame下面的right-frame距离最左边的边框还有200象
素的宽度(这段宽度里其实就是left-frame的宽)。
要解决这个问题,我们需要设置第一级子菜单所在垫层左偏移量为-200。在菜单样式中我们这样写:
addPadStyle("top-pad", "...");
addPadStyle("first-subpad", "offset-left:-200; ...");
addPadStyle("other-subpad", "...");

addStyleMenu("topmenu", "top-pad", ...):
addStyleMenu("first-submenu", "first-subpad", ...);
addStyleMenu("other-submenu", "other-subpad", ...);

addStyleGroup("top-right", "topmenu", "top-menu-name");
addStyleGroup("top-right", "first-submenu", "first-submenu-name", ...);
addStyleGroup("top-right", "other-submenu", "other-submenu-name", ...);
未完待续...
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值