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 极速 隐藏/显示万行表格列只需 60毫秒
Mar 28 Javascript
Javascript学习笔记4 Eval函数
Jan 11 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
Sep 20 Javascript
Javascript 中 null、NaN和undefined的区别总结
Apr 10 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
浅谈Javascript变量作用域问题
Dec 16 Javascript
关于session和cookie的简单理解
Jun 08 Javascript
详解基于webpack2.x的vue2.x的多页面站点
Aug 21 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
Nov 27 Javascript
VUE v-model表单数据双向绑定完整示例
Jan 21 Javascript
vue 单页应用和多页应用的优劣
Oct 22 Javascript
详解Vue的异步更新实现原理
Dec 22 Vue.js
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配置文件php.ini的路径的方法
2014/08/20 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
Python程序语言快速上手教程
2012/07/18 Python
python实现排序算法
2014/02/14 Python
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
python代码实现猜拳小游戏
2020/11/30 Python
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
十佳大学生事迹材料
2014/01/29 职场文书
主办会计岗位职责
2014/03/13 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
员工旷工检讨书
2015/08/15 职场文书
《刷子李》教学反思
2016/02/20 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS