原生Js_实现简单的下拉折叠菜单(添加弹出动画效果)
用javascript实现简单的下拉折叠菜单效果
实现步骤
(a)获得各操作的dom对象;
(b)在所有菜单按钮对象上添加单击事件;
(c)设置所有菜单按钮样式为空,并将当前按钮的样式设置为“active”;同时设置div1下面的所有div元素的display为none,并将当前按钮所对应的div的display为block
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Gary_js实现简单的下拉折叠菜单</title>
<style>
* {margin:0px; padding:0px;}
#div1 {width:200px; margin: auto; line-height:25px;}
ul {list-style:none;}
li {background:#ccc;margin-bottom:3px;}
dl {background:#eee; display:none;}
.active {background:#F90;}
</style>
<script>
//此处编写js代码,实现简单的下拉折叠菜单,默认菜单1是展开的 </script>
</head> <body>
<div id="div1">
<ul id="menu">
<li class="active">菜单1</li>
<dl style="display:block;">
<dd>菜单1.</dd>
<dd>菜单1.</dd>
<dd>菜单1.</dd>
<dd>菜单1.</dd>
</dl>
<li>菜单2</li>
<dl>
<dd>菜单2.</dd>
<dd>菜单2.</dd>
<dd>菜单2.</dd>
<dd>菜单2.</dd>
</dl>
<li>菜单3</li>
<dl>
<dd>菜单3.</dd>
<dd>菜单3.</dd>
<dd>菜单3.</dd>
<dd>菜单3.</dd>
</dl>
</ul>
</div>
</body>
</html>
效果一
点击一级菜单时弹出二级子菜单,不需要对菜单进行 display==“none”?true:false 判断(缺点:无法把三个一级菜单状态都设置为"display")

window.onload = function () {
var lis = document.getElementsByTagName('li');
var dls = document.getElementsByTagName('dl');
for (var i = ; i < lis.length; i ++) {
lis[i].index = i;
lis[i].onclick = function () {
for (var i = ; i < lis.length; i ++) {
lis[i].className ='';
dls[i].style.display = 'none';
}
this.className = 'active';
dls[this.index].style.display = 'block';
}
}
}
Gary.Script
效果二
点击一级菜单弹时进行display==“none”?true:false 使二级菜单实现点击收缩功能

<script>
//此处编写js代码,实现简单的下拉折叠菜单,默认菜单1是展开的
window.onload = function () {
var lis = document.getElementsByTagName('li');
var dls = document.getElementsByTagName('dl');
for (var i = ; i < lis.length; i ++) {
lis[i].index = i;
lis[i].onclick = function () {
for (var i = ; i < lis.length; i ++) {
lis[i].className ='';
}
this.className = 'active';
if(dls[this.index].style.display == 'block')
dls[this.index].style.display = 'none'
else
dls[this.index].style.display = 'block'
}
}
}
</script>
Gary.Script
效果三
通过animate.css 添加实现二级子菜单动画展开动画

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Gary_js实现简单的下拉折叠菜单</title>
<style>
* {margin:0px; padding:0px;}
#div1 {width:200px; margin:0 auto; line-height:25px;}
ul {list-style:none;}
li {background:#ccc;margin-bottom:3px;}
dl {background:#eee;display:none;
transform-origin:50% 0;
-webkit-animation:gary .5s ease-in;
transition: all .3s infinite;}
.active {background:#F90;}
@-webkit-keyframes gary{
0%{transform:scale(1,0);}
25%{transform:scale(1,1.2);}
50%{transform:scale(1,0.85);}
75%{transform:scale(1,1.05);}
100%{transform:scale(1,1);}
} </style>
<script>
//此处编写js代码,实现简单的下拉折叠菜单,默认菜单1是展开的
window.onload = function () {
var lis = document.getElementsByTagName('li');
var dls = document.getElementsByTagName('dl');
for (var i = 0; i < lis.length; i ++) {
lis[i].index = i;
lis[i].onclick = function () {
for (var i = 0; i < lis.length; i ++) {
lis[i].className ='';
}
this.className = 'active';
if(dls[this.index].style.display == 'block')
dls[this.index].style.display = 'none'
else
dls[this.index].style.display = 'block'
}
}
}
</script>
</head> <body>
<div id="div1">
<ul id="menu">
<li class="active">菜单1</li>
<dl style="display:block;">
<dd>菜单1.1</dd>
<dd>菜单1.2</dd>
<dd>菜单1.3</dd>
<dd>菜单1.4</dd>
</dl>
<li>菜单2</li>
<dl>
<dd>菜单2.1</dd>
<dd>菜单2.2</dd>
<dd>菜单2.3</dd>
<dd>菜单2.4</dd>
</dl>
<li>菜单3</li>
<dl>
<dd>菜单3.1</dd>
<dd>菜单3.2</dd>
<dd>菜单3.3</dd>
<dd>菜单3.4</dd>
</dl>
</ul>
</div>
</body>
</html>
Gary.Html
动画实现原理
@keyframes创建动画 传送门
创建动画是通过逐步改变从一个CSS样式设定到另一个。
在动画过程中,您可以更改CSS样式的设定多次。
指定的变化时发生时使用%,或关键字"from"和"to",这是和0%到100%相同。
0%是开头动画,100%是当动画完成。
为了获得最佳的浏览器支持,您应该始终定义为0%和100%的选择器。
transform-origin 属性:改变被转换元素的位置 传送门
transform-origin: x-axis y-axis z-axis;
animation 属性:将动画与 div 元素绑定 传送门
animation: name duration timing-function delay iteration-count direction;
transition-timing-function 属性 传送门
transition-timing-function: linear|ease|ease-in|ease-out|ease-in-out|cubic-
bezier(n,n,n,n);
| linear | 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。 |
| ease | 规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。 |
| ease-in | 规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。 |
| ease-out | 规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。 |
| ease-in-out | 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。 |
| cubic-bezier(n,n,n,n) | 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。 |
==================================分割线
H5页面运行时使用console.log()在控制台查看点击标签下标

<script>
//此处编写js代码,实现简单的下拉折叠菜单,默认菜单1是展开的
window.onload = function () {
var lis = document.getElementsByTagName('li');
var dls = document.getElementsByTagName('dl'); for (var i = 0; i < lis.length; i ++) {
lis[i].index = i;
lis[i].onclick = function () {
//清空所有的样式
for (var i = 0; i < lis.length; i ++) {
lis[i].className ='';
} this.className = 'active';
if(dls[this.index].style.display == 'block')
dls[this.index].style.display = 'none'
else
dls[this.index].style.display = 'block' console.log(this.index)
console.log(i)
}
}
}
</script>
可以看到,若果不使用lis[i].index = i去得到元素下标,那么i会不断指向数组元素最大值的下一个值!!!
//贪心的想在控制台上获得更多的信息
console.log(dls[this.index])

原生Js_实现简单的下拉折叠菜单(添加弹出动画效果)的更多相关文章
- 在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果
查看本章节 查看作业目录 需求说明: 在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果 用户将光标移动到"最新动态页"或"帮助查询" ...
- 原生js实现简单的下拉刷新功能
前言: 我们在浏览移动端web页面的时候,经常会用到下拉刷新. 现在我们用原生的js实现这个非常简单的下拉刷新功能. (温馨提示:本文比较基础,功能也很简单.写的不好的地方,希望大神提点一二.) 一. ...
- ALV屏幕捕捉回车及下拉框事件&ALV弹出框回车及下拉框事件
示例展示: 屏幕依据输入的物料编码或下拉框物料编码拍回车自动带出物料描述: 点击弹出框,输入物料编码拍回车带出物料描述,点击确认,更新ALV: 1.创建屏幕9000,用于处理ALV弹出框: 2.针对屏 ...
- 原生js实现简单的下拉加载
#获取当前滚动条的高度document.documentElement.scrollTop #获取当前窗口的高度 document.documentElement.clientHeight #获取当前 ...
- Javascript实现简单的下拉二级菜单
在线演示;http://jsfiddle.net/Web_Code/ThhbG/embedded/result/ <span style="font-size:14px;"& ...
- CSS3 3D下拉折叠菜单
在线演示 本地下载
- JQuery -> 超级简单的下拉菜单
使用jquery实现一个超级简单的下拉菜单. 效果图 最初的效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRmVlTGFuZw==/font/5a6L ...
- Example017简单的下拉框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在AJAX里 使用【 XML 】 返回数据类型 实现简单的下拉菜单数据
在AJAX里 使用XML返回数据类型 实现简单的下拉菜单数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...
随机推荐
- Oracle 服务名/实例名,Service_name 和Sid的区别
Service_name 和Sid的区别Service_name:该参数是由oracle8i引进的.在8i以前,使用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个 ...
- 加快ALTER TABLE 操作速度
mysql的alter table操作的性能对于大表来说是个大问题.mysql大部分修改表结构操作的方法都是用新的结构创建一个 新表,从旧表中查出数据插入新表,然后在删除旧表.这样的操作很耗费时间,而 ...
- 数据结构(四) 图(Graph)
在图形结构中,结点之间的关系可以是任意的. 一.图 图由定点(vertex)和边(edge)两个有限集合组成: Graph=(V,R) V是定点集,R={E},E是边集. 有向图(directed n ...
- 解决:IDE编译报错:Dangling metacharacter
Dangling metacharacter的意思是说:摇摆不定的元字符. 翻译成编程意思就是:当前字符计算有其它意思,并不能确定你到底用于什么意思.类似于中文的多义词. 如下图所示,当我们要分割字符 ...
- 导入excel-uploadify+npoi
总结: 导入文件时一定要给database设置栏位 虚拟表的栏位名称可以与数据库表不一致,但顺序一定要一致,因为它是按照顺序依次插入的 sheet.FirstRowNum = 0; sheet.Fir ...
- wpf GridSplitter左右托不了或者拖拽异常
对于水平分割线,需要将verticalAlignment属性设置为Center 对于垂直分割线,需要将horizontalAlignment属性设置为center 切记切记,不然很苦逼....
- 详解Wox
Wox 是一款国产开源免费的软件快捷启动工具,它可以快速搜索并打开你电脑上的程序.文件.或是查词翻译.网站查找等其他操作,同时还支持插件安装. Tips: 如果你需要用到文件的快速搜索.打开功能,需要 ...
- SVM处理多分类问题
"one-against-one" approach from sklearn import svm X = [[0], [1], [2], [3]] Y = [0, 1, 2, ...
- postgres中的函数
1.编写一个只有入参,没有出参的函数: CREATE OR REPLACE FUNCTION add(a NUMERIC, b NUMERIC) RETURNS NUMERIC AS $$ SELEC ...
- 韦东山嵌入式Linux学习笔记05--存储管理器
SDRAM: 原理图如下: jz2440 v3开发板上面用的内存芯片为钰创科技公司生产的EM63A165TS,一片内存大小为32MB大小,一共有两块,共64MB的大小. SDRAM接 ...