+ -
当前位置:首页 → 问答吧 → 全兼容可高亮二级缓冲折叠菜单

全兼容可高亮二级缓冲折叠菜单

时间:2010-05-28

来源:互联网

全兼容可高亮二级缓冲折叠菜单



冰极峰原创



  在后台或OA系统中最常用到的布局往往是一个全屏布局,一般都是上中下三行两列布局,页头、页脚、左侧菜单加一个右侧ifame框架页。所以那种带折叠的二级菜单是会经常使用到的,本例便是实现这样一种比较通用的全兼容可高亮二级缓冲折叠菜单。
  特点:
  1.全兼容,浏览器测试:IE5.5、IE6、IE7、IE8、FF3.0、谷歌、Safari 4.0、Opera9.0。
  2. Html结构优雅简洁,无多余标签,利于程序循环输出。
  3.样式与结构分离,你可以在样式表中修改不同的风格。
  4.当前选中项高亮状态,一级菜单和二级菜单都可以高亮显示。
  5.折叠层优雅缓冲动画。
  6.最适用于后台和一些OA系统界面。
  缺点:
  1.不支持仿刷新,这个功能在后台应用系统中应该用途不大,没有加入这个功能。
  2.在IE6中缓冲效果没有出来,对于IE6,就弱化一下效果。

  还是先看看效果截图:
1.gif (10.72 KB)
2010-5-28 03:08

图一


  简单说一下制作这样的菜单的一些简单的思路和会遇到的问题。
  一般制作一个效果,我的制作流程一般是先画出HTML结构层内容,再写样式,之后是搞一些锦上添花的效果,如JS特效等等。不知各位大牛们是怎样一个流程模式。

  结构层:
  结构层的构思一般是建立在一个感性认识上的,一般是有一个效果图,根据这个效果图构建最简洁的HTML结构。如上图所示,映入眼帘的第一印象,首先是想到用一个UL的无序列表,但是…这是一个二级嵌套的列表,这是我们首先需要考虑的问题。
  因此结构应该是下面这样子:
<li><a href="#none">一级菜单项</a>
<ul>
<li><a href="#none">二级菜单项</a></li>         
</ul>
</li>
  在有二级菜单时是一个嵌套的UL结构,无二级菜单时则是如下:
<ul class="menu">
<li><a href="#none">一级菜单项</a></li>
</ul>
  当然,你也可以采用dl-dt-dd有序列表的方式来创建这种嵌套的结构,视你的实际情况而定。
  有了最原始的结构层,你就需要添加一些必要的钩子,用于CSS和JS控制样式和效果,我一直反对那种添加很多类名的写法,这会增加页面的体积,所以最精简的作法是应用一两个必要的类名给父容器即可,然后在样式表中用子(群)选择符设置各种个性的设置。在上面的结构,你会想到用几个类名来定义所有的样式呢?
  我的做法是只用三个类名即可以控制全部的样式显示了。一个是最顶级UL,定义为class=”menu”,一个是二级菜单的容器,也就是嵌套的UL定义一个class=”level2”,最后是一级菜单项li定义一个class=”level1”,有了这三个钩子,你就可以操纵整个结构的样式了。

  表现层:
  样式表的设置都很简单,唯一要注意的是,为了便于JS控制二级菜单的显隐和记录当前选中项的高亮状态,所以我不用hover伪类来实现鼠标的滑入滑出效果,而采用JS来模拟它。用JS控制样式的关键代码如下:
/*一级菜单三态样式,供JS调用*/
.menu li.level1 a{display:block;line-height:31px;height:31px;padding-left:50px; font-size:12px;color:#fff;background:url(../images/menubg.gif) no-repeat left top;}
.menu li.level1 a.hove{background-position:left -31px;}
.menu li.level1 a.cur{background-position:left -62px;}
/*二级菜单三态样式,供JS调用*/
.menu li ul.level2 li a{display:block;height:26px;line-height:26px;background:#E7E3E7 url(../images/t1.gif) no-repeat 30px center;padding-left:50px;color:#42556B;border-top:1px #B8C2CB solid;overflow:hidden;}
.menu li ul.level2 li a.hove1{background:#F6F6F6 url(../images/t2.gif) no-repeat 30px center;}

  行为层:
  因为前面已经提到,我们在样式表并没有定义菜单的三态效果,所以我们需要给每个菜单项绑定onmouseover、onmouseout和onclick事件模拟出这种效果来。在结构层中我们并没有定义这个总容器的ID,而只定义了一个class类名,所以在JS添加了一个扩展的getElementsByClassName()方法(感谢好友司徒正美),根据类名来获得这个对象。用循环闭包来绑定这三个事件。
详细代码就不一一解说了,Demo中注释得非常清楚,请下载到本机浏览。

  更多内容请到我博客上浏览。

  最后附上全部源码:

根据7楼朋友的建议作了一点修改,并调节一下缓冲的速度,请下载最新版:
全兼容可高亮二级缓冲折叠菜单(v1.01).rar (26.99 KB)
全兼容可高亮二级缓冲折叠菜单(v1.01).rar (26.99 KB)
下载次数: 49
2010-5-28 19:39


[ 本帖最后由 by0001 于 2010-5-28 19:39 编辑 ]

附件

全兼容可高亮二级缓冲折叠菜单(v1.0).rar (26.95 KB)

2010-5-28 03:08, 下载次数: 96

作者: by0001   发布时间: 2010-05-28

颜色这样搭配还挺好看的,嘿嘿!

作者: cneptnet   发布时间: 2010-05-28

好,谢谢,正需要

作者: mylover002   发布时间: 2010-05-28

如果颜色能在炫点就好了。

作者: lifee   发布时间: 2010-05-28

这些你可以自行设计,呵呵,我可不是美术设计师。

作者: by0001   发布时间: 2010-05-28

呵呵 ,极峰出品就是精品...
我down了研究下

作者: sixw   发布时间: 2010-05-28

缓冲效果不错。
以下是一些小问题,LZ可以改进一下:
1.一级菜单点击后,显示2级菜单的过程中,1级菜单由于透明度的关系,视觉上感觉蛮别扭。
2.点击倒数第2个一级菜单,2级菜单刚跳出来的时候,底部是超出最下面个一级菜单的,没有做overflow:hidden处理
测试用浏览器:IE8

作者: cwq2jxl   发布时间: 2010-05-28

缓冲效果似乎有点生硬

作者: xyztony1985   发布时间: 2010-05-28

加上三级就完美了,速度有点快,没过渡哟

作者: 33xiao   发布时间: 2010-05-28

收藏了

作者: happy175   发布时间: 2010-05-28

谢谢,很有用

作者: shbijiben   发布时间: 2010-05-28

谢谢你的意见!
1.实例中没有使用透明度的变化,你看到的现象可能是当点击下面的一级菜单时,因为它上面的面板同时关闭,与此同时鼠标所在的一级菜单向上移动,而鼠标没有移动,就在每个二级菜单选项上滑动,这个过程又触发二级菜单项的HOVER动作,不知这种情况该如何修改,有好主意请不吝赐教。
2.第二个问题确实存在,我已经做了更新,请下载最新版本。

作者: by0001   发布时间: 2010-05-28

在我的项目没有三级菜单的需求,当然如果你要用也可以修改以适应需求的变化。
关于菜单缓冲生硬的问题,这涉及到缓冲算法,可以参考版主的一篇精彩文章添加这个算法。
在新下载包中调节了一下显示速度,请更新下载。

[ 本帖最后由 by0001 于 2010-5-28 19:41 编辑 ]

作者: by0001   发布时间: 2010-05-28

顶上去 !  这么好的东西  收下了   谢谢

作者: liu5390   发布时间: 2010-06-10

好东西····很喜欢··············

作者: taohao001   发布时间: 2010-06-10

相关阅读 更多