在后台或OA系统中最常用到的布局往往是一个全屏布局,一般都是上中下三行两列布局,页头、页脚、左侧菜单加一个右侧ifame框架页。所以那种带折叠的二级菜单是会经常使用到的,本例便是实现这样一种比较通用的全兼容可高亮二级缓冲折叠菜单。

特点:

全兼容,浏览器测试:IE5.5、IE6、IE7、IE8、FF3.0、谷歌、Safari 4.0、Opera9.0。
Html结构优雅简洁,无多余标签,利于程序循环输出。
样式与结构分离,你可以在样式表中修改不同的风格。
当前选中项高亮状态,一级菜单和二级菜单都可以高亮显示。
折叠层优雅缓冲动画。
最适用于后台和一些OA系统界面。

缺点:

不支持防刷新,这个功能在后台应用系统中应该用途不大,没有加入这个功能。
在IE6中缓冲效果没有出来,对于IE6,就弱化一下效果。
还是先看看效果截图:

简单说一下制作这样的菜单的一些简单的思路和会遇到的问题。

一般制作一个效果,我的制作流程一般是先画出HTML结构层内容,再写样式,之后是搞一些锦上添花的效果,如JS特效等等。不知各位大牛们是怎样一个流程模式。

结构层:

结构层的构思一般是建立在一个感性认识上的,一般是有一个效果图,根据这个效果图构建最简洁的HTML结构。如上图所示,映入眼帘的第一印象,首先是想到用一个UL的无序列表,但是…这是一个二级嵌套的列表,这是我们首先需要考虑的问题。

因此结构应该是下面这样子:


  • 一级菜单项

  • 在有二级菜单时是一个嵌套的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.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;}

    行为层:

    因为前面已经提到,我们在样式表并没有定义菜单的三态效果,所以我们需要给每个菜单项绑定onmouseover、onmouseout和onclick事件模拟出这种效果来。在结构层中我们并没有定义这个总容器的ID,而只定义了一个class类名,所以在JS添加了一个扩展的getElementsByClassName()方法(感谢好友司徒正美),根据类名来获得这个对象。用循环闭包来绑定这三个事件。

    详细代码就不一一解说了,Demo中注释得非常清楚,请下载到本机浏览。

    有什么问题请在本博客中跟贴讨论,祝你用得开心!
    在线演示地址 http://demo.jb51.net/js/caidan_js/demo.html
    打包下载地址 https://www.jb51.net/jiaoben/27308.html

    js 全兼容可高亮二级缓冲折叠菜单的更多相关文章

    1. CSS+jQuery实现简单的折叠菜单

      这篇文章主要介绍了CSS+jQuery实现简单的折叠菜单的代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧

    2. Android使用ExpandableListView实现三层嵌套折叠菜单

      这篇文章主要介绍了Android使用ExpandableListView实现三层嵌套折叠菜单,对布局感兴趣的同学可以参考下

    3. slideToggle+slideup实现手机端折叠菜单效果

      这篇文章主要为大家详细介绍了slideToggle+slideup实现手机端折叠菜单效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    4. js无限级折叠菜单精简版

      一个简单的js无限级折叠菜单,这里只列出JS版本的,JQUERY版本的可以到作者发的帖子上看,权当抛砖引玉了。

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

      最近一段时间一直比较忙,已经有好几个月没有打理博客了。现将一个最近在项目中制作的一个菜单实例整理出来,共享一下。

    6. javascript仿qq界面的折叠菜单实现代码

      最近一直在研究网页特效,看到qq界面的折叠菜单,于是冒出个想法,自己写一个类似的,需要的朋友可以参下

    随机推荐

    1. js中‘!.’是什么意思

    2. Vue如何指定不编译的文件夹和favicon.ico

      这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

    3. 基于JavaScript编写一个图片转PDF转换器

      本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

    4. jquery点赞功能实现代码 点个赞吧!

      点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    5. AngularJs上传前预览图片的实例代码

      使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

    6. JavaScript面向对象编程入门教程

      这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

    7. jQuery中的通配符选择器使用总结

      通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

    8. javascript 动态调整图片尺寸实现代码

      在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

    9. jquery ajaxfileupload异步上传插件

      这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    10. React学习之受控组件与数据共享实例分析

      这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

    返回
    顶部