js 导航栏多项点击显示下拉菜单代码
<!DOCTYPE html>
<html>
<head>
<title>Dropdown</title>
<!--<link rel="stylesheet" href="style.css">-->
<!--<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>-->
<!--<script src="js/jquery.min.js"></script>-->
<meta charset="utf-8" />
<style type="text/css">
body {
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}
li {
float: left;
}
li a, .dropbtn {
display: inline-block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
li a:hover, .dropdown:hover .dropbtn {
background-color: #1f75cf;
}
li.dropdown {
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #fafafa;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
text-align: left;
}
.dropdown-content a:hover {
color: white;
background-color: #1f75cf;
}
.show {
display: block;
}
</style>
</head>
<body>
<ul>
<li class="dropdown">
<a id="a" href="javascript:void(0)" class="dropbtn" onclick="showList(this)">标题 A</a>
<div class="dropdown-content" id="dropdown-a">
<a href="#">下拉 1</a>
<a href="#">下拉 2</a>
<a href="#">下拉 3</a>
</div>
</li>
<li class="dropdown">
<a id="b" href="javascript:void(0)" class="dropbtn" onclick="showList(this)">标题 B</a>
<div class="dropdown-content" id="dropdown-b">
<a href="#">下拉 1</a>
<a href="#">下拉 2</a>
<a href="#">下拉 3</a>
</div>
</li>
</ul>
<script type="text/javascript">
function showList(o) {
//1.把其他的二级ul都隐藏,
// hideList("dropdown-content" + o.id);
//把其他的二级ul隐藏方式1
hideList("dropdown-" + o.id);
//把其他的二级ul隐藏方式2
// hideList(''); //2.再切换自己的show。 // document.getElementById("dropdown-" + o.id).classList.toggle("show");
var drop = document.getElementById("dropdown-" + o.id);
if (drop.classList.contains('show')) {
drop.classList.remove('show');
// alert("yichu");
}else{
drop.classList.add('show');
// alert("xianshi");
}
} //隐藏不是自己对应的下拉div。
function hideList(option) {
var dropdowns = document.getElementsByClassName("dropdown-content"); for (var i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.id != option) {
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
} window.onclick = function(e) {
if (!e.target.matches('.dropbtn')) {
hideList("");
}
}
</script>
</body> </html>
实现效果
这里要实现的效果是,点击id为a的元素弹出dropdown-a的div元素,点击id为b的元素弹出dropdown-b的div元素。

实现思路 (showList方法的实现过程)
注意事项:这里有个设计点,每一个弹出的下拉div(有dropdown-*类的div)同时有id和class。class是为了方便使用for循环对他们操作,比如这里将他们进行隐藏。第二个是为了写css,每个下拉列表的css都是一样的。
1.思路是使用js,获得所有的有dropdown-content类的元素。
2.第二步有2种做法,如果没有强迫症的话就随便选一种就可以了。个人比较喜欢第二种。强迫症对于这2种如果不是很明白的话,可以使用上面的注释调的alert函数调试一下。选择第一种hidelist(“”),你会发现在执行第3步之前,所对应的dropdown-content永远是隐藏的,由隐藏切换到显示。所以你点击的时候,永远都是alert显示。这就是这2种做法的区别。
2-1.先把所有的弹出层(dropdown-content)隐藏。函数hideList('');
2-2.第二种就是,判断是否是点击的a链接所对应的那个dropdown-content,其余的全部隐藏。函数hideList("dropdown-" + o.id);
3.最后一步就是使用toggle方法切换所对应dropdown-content元素的显示或隐藏状态。
4.还有一个就是当下拉菜单展开的时候,点击窗体其他地方会把它隐藏的效果。跟模态框是一样的。代码在最后那几行。
这里举个不生动的例子,假如是动物园的个体表演。有猴子,狮子,灰熊...,每次出来一个表演。便于理解showlist(“”)方法。这里举例的第二步是hidelist(“”)函数;
1.表演还没开始,就先全部关起来。(全部隐藏起来)
2.然后点名,让猴子表演。就把猴子的笼子打开。猴子就被大家看到了。(显示猴子)
3.然后点名让狮子表演。(又一次的点击事件)
4.全部隐藏
5.展示狮子
以此循环。。。
js 导航栏多项点击显示下拉菜单代码的更多相关文章
- js (单个的)点击式下拉菜单
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 有序无序Ul->Li Ol->Li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单(变形2 ---修饰)
从上面可以看出,两个问题,第一:下拉出现的太快太突然,第二:再点击下一个下拉菜单的时候,上一个不会闭合,针对这两个问题,接下来会一 一解决. 解决下拉太快: js中有个jquery效果,有一个效果是j ...
- Bootstrap学习笔记(5)--实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单
实现Bootstrap导航条可点击和鼠标悬停显示下拉菜单 微笑的鱼 2014-01-03 Bootstrap 5,281 次围观 11条评论 使用Bootstrap导航条组件时,如果你的导航条带有下拉 ...
- lightinthebox头部分类菜单下拉导航,使鼠标移到See All Categories就显示下拉菜单
lightinthebox头部分类菜单下拉导航,使鼠标移到See All Categories就显示下拉菜单 打开includes\templates\lightinthebox\common\tpl ...
- 可控制导航下拉方向的jQuery下拉菜单代码
效果:http://hovertree.com/texiao/nav/1/ 代码如下: <!DOCTYPE html> <html> <head> <meta ...
- bootstrap 导航栏鼠标悬停显示下拉菜单
在jsp中加入一下代码: .navbar .nav > li:hover .dropdown-menu { display: block;} 全部代码如下所示: <%@ page lang ...
- 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单
实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...
- Extjs grid禁用头部点击三角下拉菜单
表格头部的三角在点击的时候禁止出现下拉菜单,给每一列添加属性menuDisabled:true xtype:'grid', enableColumnResize:false, columns:[ {t ...
- js 点击按钮显示下拉菜单
<li> <a id = "rank" onclick="showGroup()"></a></li><l ...
随机推荐
- ETL子系统
最近在看<Pentaho Kettle 解决方案>,看到 ETL子系统,发现信息量比较大,用简短的语句做一下笔记. ETL子系统有34种子系统,被分成4个部分:抽取.清洗和更正.发布.管理 ...
- 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(2.Azure Functions实战)
本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...
- spring boot2 修改默认json解析器Jackson为fastjson
0.前言 fastjson是阿里出的,尽管近年fasjson爆出过几次严重漏洞,但是平心而论,fastjson的性能的确很有优势,尤其是大数据量时的性能优势,所以fastjson依然是我们的首选:sp ...
- mySql中The user specified as a definer ('root'@'%') does not exist
背景 最近往现场导了个库,发现功能报错,一看是视图报错,navicat一看,哎呦,直接报错.The user specified as a definer ('root'@'%') does not ...
- SuperMap iDesktop .NET 10i制图技巧-----如何利用二维平面数据起白膜
1.打开超图的SuperMap iDesktop,加载数据源 udbx其实就是类似于arcgis中的gdb一样的东西,把数据压缩在里面了,这样也可以保证数据的统一集中 2.打开二维面数据,里面的结构如 ...
- 使用 SQL 服务器时,"评估期已过期"错误消息
当打开sql server2008企业管理器的时候,出现报错“评估期已过.有关如何升级的测试版软件的信息.....” 修改注册表:HKEY_LOCAL_MACHINE/SOFTWARE/Microso ...
- 【STM32-V5】STM32F407开发板开源, 丰富软件资源, 强劲硬件配置, 配套500实例, 10套手册带视频教程2019-12-12
淘宝购买地址:购买地址链接 从2013年5月份发布至今,开发板硬件更新过6个版本,软件资料更新过85次.当前标准库最新版本V8.8,HAL库最新版本V1.1 安富莱微信公共平台,欢迎大家关注(打造高质 ...
- JS中遍历对象属性的四种方法
Object.keys().Object.values().Object.entries().for...in.Map (1)Object.keys(): let ex1 = {c1: 'white' ...
- [小技巧]你真的了解C#中的Math.Round么?
今天在某.NET Core 群中看到有人在问Math.Round的问题.其实这个问题之前有很多人遇到了,在此总结一下. 开发者为了实现小数点后 2 位的四舍五入,编写了如下代码, var num = ...
- weed3-1.hello world
Weed3 一个微型ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 05年的时候开 ...