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 相关文章推荐
jquery中常用的SET和GET
Jan 13 Javascript
jquery 页面全选框实践代码
Apr 02 Javascript
Javascript 去除数组的重复元素
May 04 Javascript
动态创建样式表在各浏览器中的差异测试代码
Sep 13 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 Javascript
仿JQuery输写高效JSLite代码的一些技巧
Jan 13 Javascript
javascript数组排序汇总
Jul 07 Javascript
微信小程序 教程之wxapp 视图容器 view
Oct 19 Javascript
jQuery Ajax前后端使用JSON进行交互示例
Mar 17 Javascript
Angular2 父子组件数据通信实例
Jun 22 Javascript
微信小程序rich-text富文本用法实例分析
May 20 Javascript
swiper实现异形轮播效果
Nov 28 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
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
JS前端笔试题分析
2016/12/19 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
jquery实现广告上下滚动效果
2021/03/04 jQuery
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
python学习 流程控制语句详解
2016/06/01 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
python中怎么表示空值
2020/06/19 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
一套PHP的笔试题
2013/05/31 面试题
建议书怎么写
2014/03/12 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
内勤岗位职责
2015/02/10 职场文书
党支部鉴定意见
2015/06/02 职场文书
什么是SOLID
2022/03/24 Javascript