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 animate图片模向滑动示例代码
Jan 26 Javascript
node.js适合游戏后台开发吗?
Sep 03 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
基于JS2Image实现圣诞树代码
Dec 24 Javascript
基于jquery实现简单的分页控件
Mar 17 Javascript
js制作可以延时消失的菜单
Jan 13 Javascript
javaScript之split与join的区别(详解)
Nov 08 Javascript
使用JavaScript解析URL的方法示例
Mar 01 Javascript
vue双向绑定及观察者模式详解
Mar 19 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
May 07 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 Javascript
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 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读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
php上传文件问题汇总
2015/01/30 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python能在浏览器能运行吗
2020/06/17 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
python绘制高斯曲线
2021/02/19 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
简述数组与指针的区别
2014/01/02 面试题
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
校园网站的创业计划书范文
2013/12/30 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
小班下学期个人总结
2015/02/12 职场文书
学校少先队工作总结
2015/08/12 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL