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


Posted in Javascript onOctober 31, 2016

我们在淘宝、搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片。那么如何实现导航菜单栏中的二级下拉菜单?下面小编给大家分享实现思路。

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.用javasc

<!DOCTYPE htm>
<html lang="en">
<head >
<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> 
script>
function show(li){
var ul=li.getElementsByTagName("ul")[0];
// 关建二:在li这个对象内查询标签名为ul的标签,由于二级标签只有一个,所以索引为0即可。
ul.style.display="block";
// 关键三:当鼠标划过li时,其子元素ul标签的display为block
}
function hide(li){
var ul=li.getElementsByTagName("ul")[0];
ul.style.display="none";
// 关键四:当鼠标划出li时,其子元素ul的display为none
}
/script>

使用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库文件 -->
script type="text/javascript">
$(function(){
$(".navmenu").mouseover(function(){
$(this).children("ul").show();
})
})
// 关键二:正确使用jQuey的语法完成行为。
$(function(){
$(".navmenu").mouseout(function(){
$(this).children("ul").hide();
})
})
/script>

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

最终的实现效果如下;

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

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

以上所述是小编给大家介绍的JS中用三种方式实现导航菜单中的二级下拉菜单,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
你需要知道的JavsScript可以做什么?
Jun 29 Javascript
InnerHtml和InnerText的区别分析
Mar 13 Javascript
jquery json 实例代码
Dec 02 Javascript
ExtJs使用总结(非常详细)
Mar 22 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
Feb 05 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
Jun 09 Javascript
Bootstrap 组件之按钮(二)
May 11 Javascript
vue深入解析之render function code详解
Jul 18 Javascript
浅谈Vue SPA 首屏加载优化实践
Dec 15 Javascript
jquery向后台提交数组的代码分析
Feb 20 jQuery
JavaScript 如何计算文本的行数的实现
Sep 14 Javascript
微信小程序 获取微信OpenId详解及实例代码
Oct 31 #Javascript
JavaScript事件用法浅析
Oct 31 #Javascript
js中通过getElementsByName访问name集合对象的方法
Oct 31 #Javascript
JavaScript递归操作实例浅析
Oct 31 #Javascript
在html中引入外部js文件,并调用带参函数的方法
Oct 31 #Javascript
Validform表单验证总结篇
Oct 31 #Javascript
Javascript数组中push方法用法分析
Oct 31 #Javascript
You might like
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
php中错误处理操作实例分析
2019/08/23 PHP
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
Python 开发Activex组件方法
2009/11/08 Python
python实现自动重启本程序的方法
2015/07/09 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
详解Django的CSRF认证实现
2018/10/09 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
python处理document文档保留原样式
2019/09/23 Python
Pytorch之保存读取模型实例
2019/12/30 Python
python3下pygame如何实现显示中文
2020/01/11 Python
主治医师岗位职责
2013/12/10 职场文书
志愿者宣传口号
2014/06/17 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
员工2014年度工作总结
2014/12/09 职场文书
铁人观后感
2015/06/16 职场文书
《月光曲》教学反思
2016/02/16 职场文书
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS