通用无限极下拉菜单

2024-01-14 17:48

本文主要是介绍通用无限极下拉菜单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      下拉菜单在我开发中经常遇到,但是没个项目都需要从新编写,改起来虽然简单但是很麻烦,我这个人还是比较懒的,今天有时间把我以前的项目开发中的菜单整理一遍,编写一个通用版本,以后就不需要那么麻烦了。

特点

今天整理的菜单是由jquery+css开发有如下特点:

一、通用性强

以前在用的一个下拉菜单有个问题,需要对主导航和子菜单进行单独的设置,比如,二级菜单是class="first_menu",三级菜单是class="second_menu"....依次类推,这样的写法有个问题就是不利于程序员执行循环输出,而本菜单只需引入一个CSS样式即可,无需对多级菜单定义。

二、美观自动调用下拉指示

以前我们手工会对下拉菜单添加一个下拉展示的class,而现在,只需要在css中定义好下拉效果的样式,代码会自动寻找下拉菜单并且添加指示箭头;

三、调用简单

程序员输出列表简单不需要很多的判断,只要递归调用菜单数据即可。

实现

一、HTML代码

   首先我们在页面输出菜单数据,这些数据用ul和li组成构成菜单列表。具体结构代码如下所示:

<ul class="Menue"><li class="Menue_li"><a href="#">首页</a></li><li class="Menue_li"><a href="#">菜单一</a><ul class="sub_menu"><li><a href="#">过山车</a></li><li><a href="#">火山爆发</a></li><li><a href="#">小小鸟</a></li></ul></li><li class="Menue_li"><a href="#">菜单二</a><ul class="sub_menu"><li><a href="#">关于我们</a><ul class="sub_menu"><li><a href="#">山高地缘</a><ul class="sub_menu"><li><a href="#">飞鸽传书</a></li><li><a href="#">生生世世</a></li><li><a href="#">飞黄腾达</a></li></ul></li><li><a href="#">数据库</a><ul class="sub_menu"><li><a href="#">数据库表</a></li><li><a href="#">数据加密</a></li><li><a href="#">数据建模</a></li></ul></li><li><a href="#">C摄像头</a></li></ul></li><li><a href="#">测试产品</a></li></ul></li></ul>

 

一些基本的html代码,很简单无需解释代码含义,强调一下代码结构:无论是二级、三级还是几级菜单主要是嵌套ul即可;样式表名称也非常单一,子菜单就是“sub_menu”样式,这样非常有利于程序代码循环调用。

二、CSS样式

Css样式代码也非常简单,具体代码如下:

a { text-decoration:none; }ul, li { list-style:none; margin:0; padding:0; }/*定义菜单*/.Menue li { background:#111; color:#fff; height:30px; line-height:30px; position:relative; float:left; margin-right:5px; width:100px; text-align:center; font-family:Arial, Helvetica, sans-serif;  }.Menue li a { color:#fff; font-size:14px; display:block; }/*下拉菜单样式*/ul.sub_menu { position:absolute;width:100px; display:none; z-index:999; }.Menue li ul.sub_menu li { background:none; color:#555; font-size:12px; border-bottom:1px #333 solid; position:relative; width:100px; height:30px; }.Menue li ul.sub_menu li.last { border-bottom:none; } /*js会对最后一个li添加该class,去掉border-bottom效果*/.Menue li ul.sub_menu li a { background:#222; color:#888; display:block;height:30px; }.Menue li ul.sub_menu li a:hover, .Menue li ul.sub_menu li a.now { background:#f90;color:#fff;}.Menue li.now,.Menue li.current { background:#f60;color:#fff;}/*如果有下拉菜单添加的class*/.hasmenu { background:url(arrow.png) no-repeat right; padding-right:15px;}/*主导航箭头向下*/.Menue li a.hasmenu {  background:url(arrow.png) no-repeat right; padding-right:15px;background-position:right -30px;}/*下拉菜单箭头向右*/.Menue li ul.sub_menu li a.hasmenu { background:#222 url(arrow.png) no-repeat right top;}.Menue li ul.sub_menu li a.hasmenu:hover { background:#f90 url(arrow.png) no-repeat right top; color:#fff;}

 

这里我只强调两点注意事项:

1、position中absolute 与 relative区别

absolute:绝对定位,CSS 写法“ position: absolute; ”,它的定位分两种情况,如下:

A、没有设定 Top、Right、Bottom、Left 的情况,默认依据父级的“内容区域原始点”为原始点。

B. 有设定 Top、Right、Bottom、Left 的情况,这里又分了两种情况如下:

(1). 父级没 position 属性,浏览器左上角(即 Body)为“坐标原始点”进行定位,位置由 Top、Right、Bottom、Left 属性决定。

  (2). 父级有 position 属性,父级的“坐标原始点”为原始点。

relative:相对定位,CSS 写法“ position: relative; ”,参照父级的“内容区域原始点”为原始点,无父级则以 Body 的“内容区域原始点”为原始点,位置由 Top、Right、Bottom、Left 属性决定,且有“撑开或占据高度”的作用。

    以上两种区别很重要,是十分常用的一个技巧,一定要区别开,本人在开发中就浪费了很多时间找问题其实就是因为这两个属性引起的。

2、background-position使用

有时候我们为了提升网站速度和网站管理方便,经常把一些美化常用的小图片放在一张大图片上,css需要相应的小图片时就可以通过这个方法来实现,只要弄明白什么意思调用起来十分方便。这个方法说明白点就是图片截取功能,用法具体说明如下:

语法:

background-position : length || length

background-position : position || position

取值:

length : 百分数 | 由浮点数字和单位标识符组成的长度值。

position :top | center | bottom | left | center | right

说明:
设置或检索对象的背景图像位置。必须先指定 background-image 属性。该属性定位不受对象的补丁属性( padding )设置影响。默认值为: 0% 0% 。此时背景图片将被定位于对象不包括补丁( padding )的内容区域的左上角。如果只指定了一个值,该值将用于横坐标。纵坐标将默认为 50% 。如果指定了两个值,第二个值将用于纵坐标。如果设置值为 right center ,因为 right 作为横坐标值将会覆盖 center 值,所以背景图片将被居右定位。下面是一些等式

top left, left top 等价于 0% 0%.

top, top center, center top 等价于 50% 0%.

right top, top right 等价于 100% 0%.

left, left center, center left 等价于 0% 50%.

center, center center 等价于 50% 50%.

right, right center, center right 等价于 100% 50%.

bottom left, left bottom 等价于 0% 100%.

bottom, bottom center, center bottom 等价于 50% 100%.

bottom right, right bottom 等价于 100% 100%

 

三、JS代码

本菜单是以jquery为基础的所以首先必须引入jquery代码库,然后编写如下JS代码实现下拉菜单。

<script src="js/jquery.min.js"></script><script>$(document).ready(function(){//为导航设置默认高亮 与本菜单无关
$("ul.Menue li.Menue_li:eq(0)").addClass("current")/*jquery menu 开始*///为子菜单的最后一个li添加样式,适合为li添加下划线时去除最后一个的下划线
$(".sub_menu").find("li:last-child").addClass("last")//遍历全部li,判断是否包含子菜单,如果包含则为其添加箭头指示状态
$(".Menue li").each(function(){if($(this).find("ul").length!=0){$(this).find("a:first").addClass("hasmenu")}})//
$(".Menue li").hover(function(){$(this).addClass("now");var menu = $(this);menu.find("ul.sub_menu:first").show();},function(){$(this).removeClass("now");$(this).find("ul.sub_menu:first").hide();});var submenu = $(".sub_menu").find(".sub_menu")submenu.css({left:"100px",top:"0px"})$(".sub_menu li").hover(function(){$(this).find("a:first").addClass("now")$(this).find("ul:first").show();},function(){$(this).find("a:first").removeClass("now")$(this).find("ul:first").hide()});/*jquery menu 结束*/})</script>

 

通过以上步骤就实现了一个通用的多级菜单,上面代码是本人日常开发中的积累,由于本人水平有限可能存在着许多错误希望同僚们批评指正或提出更优化的代码供本人参考,谢谢。源代码上传,欢迎下载。

这篇关于通用无限极下拉菜单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/605994

相关文章

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}

j2EE通用jar包的作用

原文:http://blog.sina.com.cn/s/blog_610901710101kx37.html IKIKAnalyzer3.2.8.jar // 分词器 ant-junit4.jar // ant junit antlr-2.7.6.jar // 没有此包,hibernate不会执行hql语句。并且会报NoClassDefFoundError: antlr

通用内存快照裁剪压缩库Tailor介绍及源码分析(一)

背景 我们知道内存快照是治理 OOM 问题及其他类型的内存问题的重要数据源,内存快照中保存了进程虚拟机的完整的堆内存数据,很多时候也是调查其他类型异常的重要参考。但是dump出来的堆转储文件.hprof往往很大,以 LargeHeap 应用为例,其 OOM 时的内存快照大小通常在512M左右,要有效的存储和获取都是一个问题。 线下拿到hprof文件相对容易,也可以预防OOM,但覆盖的场景十分有

SpringBoot中利用EasyExcel+aop实现一个通用Excel导出功能

一、结果展示 主要功能:可以根据前端传递的参数,导出指定列、指定行 1.1 案例一 前端页面 传递参数 {"excelName": "导出用户信息1725738666946","sheetName": "导出用户信息","fieldList": [{"fieldName": "userId","fieldDesc": "用户id"},{"fieldName": "age","fieldDe

数据结构(邓俊辉)学习笔记】排序 5——选取:通用算法

文章目录 1. 尝试2. quickSelect3.linearSelect:算法4. linearSelect:性能分析5. linearSelect:性能分析B6. linearSelect:性能分析C 1. 尝试 在讨论过众数以及特殊情况下中位数的计算方法以后,接下来针对一般性的选取问题,介绍优化的通用算法。 既然选取问题的查找目标就是在整个数据集中按大小次序秩为 k

c++通用模板类(template class)定义实现详细介绍

有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类:class Compare_int { public : Compare(int a,int b) { x=a; y=b; } int max( ) { return (x>y)?x:y; } int min( ) { return (x&... 有时,有两个或多个类,其功能是相同的,仅仅是数

NXP,S32K1XX汽车通用微控制器开发笔记

文章目录 1. 概述2. 开发环境配置2.1 S32 Design Studio2.2 安装SDK2.3 新建demo工程2.4 字体配置2.5 按需求修改demo2.5.1 修改pin脚定义2.5.2 增加串口打印功能 2.6 编译代码2.7 debuger 配置 参考 1. 概述 S32K1系列32位微控制器(MCU)提供基于Arm® Cortex®-M的MCU,以及基

使用Mybatis SqlProvider类相关注解生成通用Mapper接口

使用Mybatis SqlProvider类相关注解生成通用Mapper接口 1. 使用Mybatis @SelectProvider @InsertProvider @UpdateProvider @DeleteProvider注解封装BaseMapper<E, I>通用接口, 普通实体类Mapper接口只需要继承该接口, 即可实现基础常用的CRUD功能. BaseMapper<E, I>

React 通用后台管理项目

React 通用后台管理项目 项目介绍 本项目是基于React的通用后台管理系统,整体系统有数据可视化展示,数据基本的增删改查功能。项目使用 Create React App创建,主语言为JavaScript。在使用React框架过程中通过hook进行页面逻辑编写。后端接口数据使用Mock进行模拟。 开源项目代码地址 https://github.com/yaodada123/react-