JS 实现导航菜单中的二级下拉菜单的几种方式


Posted in Javascript onOctober 31, 2016

最近整理了, JS 实现导航菜单中的二级下拉菜单的三种方式,便于项目中应用。

 如何实现导航菜单栏中的二级下拉菜单?

我们在淘宝、搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片。

JS 实现导航菜单中的二级下拉菜单的几种方式

但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考。

1.仅使用html和css

<meta charset="UTF-8">
<title>Document</title>
<style>
*{margin:0;padding: 0;list-style: none;text-decoration: none;}
#nav{width: 500px;height: 40px;background: #ccc;margin: 0 auto;}
ul{background: #aaa}
ul li{float:left; display:block; height: 40px; line-height: 40px; padding: 0 20px; position: relative;}
ul li:hover{background: #cea;}
ul li ul li{float: none;}
/*关键一:将二级菜单设置为display:none;*/
ul li ul{position: absolute;top:40px;left: 0; display: none;}
ul li ul li:hover{background: red;}
/*关键二:在划过二级菜单从属的一级菜单时,设置为display:block;*/
ul li:hover ul{display: block;}
</style>
 
 
<div id="nav">
  <ul>
    <li><a href="">首页</a></li>
    <li><a href="">汽车</a>
      <ul>
        <li><a href="#">奥迪</a> </li>
        <li><a href="#">道奇</a> </li>
      </ul>
    </li>
    <li><a href="">手机</a>
      <ul>
        <li><a href="#">小米</a> </li>
        <li><a href="#">华为</a> </li>
      </ul>
    </li>
    <li><a href="">联系我们</a></li>
  </ul>
</div>

我们可以看到,这种方法是比较好的,它保证了结构与表现的完全分离。

2.用javascript实现

<meta charset="UTF-8">
<title>Document</title>
<style>
*{margin:0;padding: 0;list-style: none;text-decoration: none;}
#nav{width: 500px;height: 40px;background: #ccc;margin: 0 auto;}
ul{background: #aaa}
ul li{float:left; display:block; height: 40px; line-height: 40px; padding: 0 20px; position: relative;}
ul li:hover{background: #cea;}
ul li ul li{float: none;}
ul li ul{position: absolute;top:40px;left: 0; display:none;}
ul li ul li:hover{background: red;}
</style>
 
 
<div id="nav">
  <ul>
    <li><a href="#">首页</a></li>
    <li onmouseover="show(this)" onmouseout="hide(this)"><a href="#">汽车</a>
  <!-- 关键一:在二级标题从属的一级标题标签内设置时间执行程序,this代表的时这个li元素 -->
      <ul>
        <li><a href="#">奥迪</a> </li>
        <li><a href="#">道奇</a> </li>
      </ul>
    </li>
    <li onmouseover="show(this)" onmouseout="hide(this)"><a href="#">手机</a>
      <ul>
        <li><a href="#">小米</a> </li>
        <li><a href="#">华为</a> </li>
      </ul>
    </li>
    <li><a href="#">联系我们</a></li>
  </ul>
</div>

使用javascript实现起来较为麻烦,且这里结构和行为没有分开(虽然可以试用dom在JavaScript中创建使得结构和行为分开,但十分繁琐),不推荐。

3.用jQuery实现

jQuery是一种javascript库,我们可以在jQuery官网上下载最新版本的库文件,其中压缩的文件是用于产品的,为压缩的文件是便于开发人员学习和调试的。下载到本机以后,需要将库文件引用到html中,由于jQuery本质上也是JavaScript,所以引用方式为:

<script src="路径名称"></script>  

用jQuery实现二级下拉菜单的代码如下:

<meta charset="UTF-8">
<title>Document</title>
<style>
*{margin:0;padding: 0;list-style: none;text-decoration: none;}
#nav{width: 500px;height: 40px;background: #ccc;margin: 0 auto;}
ul{background: #aaa}
ul li{float:left; display:block; height: 40px; line-height: 40px; padding: 0 20px; position: relative;}
ul li:hover{background: #cea;}
ul li ul li{float: none;}
ul li ul{position: absolute;top:40px;left: 0; display: none;}
ul li ul li:hover{background: red;}
</style>
 
 
<div id="nav">
  <ul>
    <li><a href="">首页</a></li>
    <li class="navmenu"><a href="">汽车</a>
      <ul>
        <li><a href="#">奥迪</a> </li>
        <li><a href="#">道奇</a> </li>
      </ul>
    </li>
    <li class="navmenu"><a href="">手机</a>
      <ul>
        <li><a href="#">小米</a> </li>
        <li><a href="#">华为</a> </li>
      </ul>
    </li>
    <li><a href="">联系我们</a></li>
  </ul>
</div>

 <!-- 关键一:引入jQuery库文件 -->

 显然,使用jQuery是非常方便的。

 JS 实现导航菜单中的二级下拉菜单的几种方式

最终的实现效果如下;

即当鼠标划过一级菜单时,会出现相应的二级菜单。

 感谢阅读,希望能帮助到大家,谢谢大家对本站支持!

Javascript 相关文章推荐
jquery 问答知识整理
Feb 11 Javascript
jQuery中需要注意的细节问题小结
Dec 06 Javascript
jQuery写的日历(包括日历的样式及功能)
Apr 23 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
Mar 02 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
Dec 12 Javascript
用JS动态改变表单form里的action值属性的两种方法
May 25 Javascript
Bootstrap Table的使用总结
Oct 08 Javascript
原生javascript实现的全屏滚动功能示例
Sep 19 Javascript
使用classList来实现两个按钮样式的切换方法
Jan 24 Javascript
详解JavaScript添加给定的标签选项
Sep 17 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
Feb 13 Javascript
Vue 列表页带参数进详情页的操作(router-link)
Nov 13 Javascript
JS中作用域和变量提升(hoisting)的深入理解
Oct 31 #Javascript
jsp 网站引入外部css或者js失效问题解决
Oct 31 #Javascript
js学习笔记之事件处理模型
Oct 31 #Javascript
基于JS实现checkbox全选功能实例代码
Oct 31 #Javascript
新手学习前端之js模仿淘宝主页网站
Oct 31 #Javascript
vue.js学习笔记之绑定style样式和class列表
Oct 31 #Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
Oct 31 #Javascript
You might like
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
php简单防盗链实现方法
2015/07/29 PHP
实例解析php的数据类型
2018/10/24 PHP
js身份证验证超强脚本
2008/10/26 Javascript
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
vue 微信授权登录解决方案
2018/04/10 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
浅谈python中的正则表达式(re模块)
2017/10/17 Python
python数据封装json格式数据
2018/03/04 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
python中取绝对值简单方法总结
2020/07/24 Python
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
什么是规则表达式
2012/05/03 面试题
自荐书格式
2013/12/01 职场文书
经贸日语专业个人求职信
2013/12/13 职场文书
毕业自我评价
2014/02/05 职场文书
军训感想500字
2014/02/20 职场文书
节能环保标语
2014/06/12 职场文书
公安学专业求职信
2014/07/27 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
2015年植树节活动总结
2015/02/06 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
电信营业员岗位职责
2015/04/14 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP