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的变量值传递给ASP变量
Dec 10 Javascript
通过一段代码简单说js中的this的使用
Jul 23 Javascript
javascript常用方法汇总
Dec 02 Javascript
javascript实现手机震动API代码
Aug 05 Javascript
javascript实现状态栏中文字动态显示的方法
Oct 20 Javascript
jQuery使用cookie与json简单实现购物车功能
Apr 15 Javascript
灵活使用数组制作图片切换js实现
Jul 28 Javascript
详解基于Vue+Koa的pm2配置
Oct 24 Javascript
获取layer.open弹出层的返回值方法
Aug 20 Javascript
使用Angular Cli如何创建Angular私有库详解
Jan 30 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 Javascript
javascript中闭包closure的深入讲解
Mar 03 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遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
linux下python抓屏实现方法
2015/05/22 Python
Python中join函数简单代码示例
2018/01/09 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
详解python播放音频的三种方法
2019/09/23 Python
Python生成词云的实现代码
2020/01/14 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
.net笔试题
2014/03/03 面试题
自荐信的禁忌和要点
2013/10/15 职场文书
优秀医生事迹材料
2014/02/12 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
2014教师研修学习体会
2014/07/08 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
食品卫生管理制度
2015/08/06 职场文书
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
一文解答什么是MySQL的回表
2022/08/05 MySQL