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 相关文章推荐
JavaScript 常用函数
Dec 30 Javascript
Js 时间函数getYear()的使用问题探讨
Apr 01 Javascript
用js实现控件的隐藏及style.visibility的使用
Jun 14 Javascript
基于jQuery实现的旋转彩圈实例
Jun 26 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
JS中的三个循环小结
Jun 20 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
vue移动端实现手机左右滑动入场动画
Jun 17 Javascript
JavaScript实现更换背景图片
Oct 18 Javascript
vue移动端的左右滑动事件详解
Jun 17 Javascript
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
在JavaScript中如何使用宏详解
May 06 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为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
php中explode函数用法分析
2014/11/15 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
python构建深度神经网络(DNN)
2018/03/10 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
汽车检测与维修个人求职信
2013/09/24 职场文书
实习鉴定范文
2013/12/19 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
合作协议书模板
2014/10/10 职场文书
北大自主招生自荐信
2015/03/04 职场文书
2015入党自荐书范文
2015/03/05 职场文书
2016年元旦主持词
2015/07/06 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
调解协议书范本
2016/03/21 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python