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 相关文章推荐
js的逻辑运算符 ||
May 31 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
Dec 04 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
Jan 15 Javascript
简单几行JS Code实现IE邮件转发新浪微博
Jul 03 Javascript
每天一篇javascript学习小结(Array数组)
Nov 11 Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 Javascript
Vue.js快速入门实例教程
Oct 15 Javascript
jquery操作ID带有变量的节点实例
Dec 07 Javascript
JavaScript实现弹窗效果代码分析
Mar 09 Javascript
webpack external模块的具体使用
Mar 10 Javascript
微信小程序框架的页面布局代码
Aug 17 Javascript
vue-form表单验证是否为空值的实例详解
Oct 29 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在特殊字符前加斜杠的实现代码
2011/07/17 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
js实现日期级联效果
2014/01/23 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
JS实现的简单拖拽功能示例
2017/03/13 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
意大利奢侈品网站:Italist
2016/08/23 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
宿舍违规检讨书
2014/01/12 职场文书
美术教师自我鉴定
2014/02/12 职场文书
工程师岗位职责规定
2014/02/26 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
新品发布会主持词
2014/04/02 职场文书
学生会主席演讲稿
2014/04/25 职场文书
小区文明倡议书
2014/05/16 职场文书
大学生标准自荐书
2014/06/15 职场文书
垂直极限观后感
2015/06/08 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
深入理解Pytorch微调torchvision模型
2021/11/11 Python
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL