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 相关文章推荐
FormValid0.5版本发布,带ajax自定义验证例子
Aug 17 Javascript
jquery 子窗口操作父窗口的代码
Sep 21 Javascript
jQuery 获取对象 定位子对象
May 31 Javascript
使用纯javascript实现放大镜效果
Mar 18 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
Jan 24 Javascript
js实现碰撞检测特效代码分享
Oct 16 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
js 获取图像缩放后的实际宽高,位置等信息
Mar 07 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
Nov 05 Javascript
百度小程序之间的页面通信过程详解
Jul 18 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
OpenLayers3实现地图鹰眼以及地图比例尺的添加
Sep 25 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调用数据库的存贮过程
2006/10/09 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
php绘制一个矩形的方法
2015/01/24 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
php常用字符函数实例小结
2016/12/29 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
大白话讲解JavaScript的Promise
2017/04/06 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
python顺序执行多个py文件的方法
2019/06/29 Python
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
学前教育教师求职自荐信
2013/09/22 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
导游词之西递宏村
2019/12/10 职场文书