javascript仿qq界面的折叠菜单实现代码


Posted in Javascript onDecember 12, 2012

最近一直在研究网页特效,看到qq界面的折叠菜单,于是冒出个想法,自己写一个类似的,上网查了一下,发现已经有不少类似的菜单效果,不管那么多,先写着再说吧.

以下是html结构:
<div id="a"><div id="h1">sdfds</div><div id="b1">dsfdsfsdfsd</div><div id="h2">dsf</div><div id="b2">dsfdsfsdf</div>.......................</div>
id为a里的便是你要添加的菜单的标题和内容.

下面是javascript代码:

sx.activex.packmenu={ 
create:function(t){ 
var a=document.createElement("div"); 
var _t=t; 
a.style.height="300px"; 
a.style.width="150px"; 
a.style.border="1px red solid"; 
a.style.overflow="hidden"; 
for(var i=0;i<t.length;i++){ 
var h=document.createElement("div"); 
var b=document.createElement("div");; 
h.style.backgroundColor="blue"; 
h.style.height="10%"; 
b.style.padding="5px"; 
b.style.textAlign="center"; 
b.style.border="1px green solid"; 
h.innerHTML=t[i][0]; 
b.innerHTML=t[i][1]; 
b.style.overflow="hidden"; 
b.style.height="0px"; 
b.style.display="none"; 
h.onclick=function(){ 
if(this.nextSibling.style.display=="none"){ 
this.nextSibling.style.height="1px"; 
this.nextSibling.style.display="block"; 
this.h=window.setInterval(function(t,t1){ 
return function(){ 
if(!t1) return; 
//alert(t.nextSibling.offsetHeight); 
if(parseInt(t.nextSibling.style.height)<100-_t.length*parseInt(a.all[0].style.height)-3){ 
t.nextSibling.style.height=parseInt(t.nextSibling.style.height)+3+"%"; 
t1.style.height=parseInt(t1.style.height)-3+"%"; 
} 
else{ 
t.nextSibling.style.height=100-_t.length*parseInt(a.all[0].style.height)+"%";; 
t1.style.display="none"; 
t1.style.height="0px"; 
window.clearInterval(t.h); 
} 
} 
}(this,(function(){ 
for(var ii=0;ii<a.all.length;ii++){ 
if(parseInt(a.all[ii].style.height)>10) 
return a.all[ii]; 
} 
})()),10); 
} 
else{ 
if(this!=this.parentNode.firstChild){ 
this.previousSibling.style.height="1px"; 
this.previousSibling.style.display="block"; 
} 
else{ 
this.parentNode.lastChild.style.display="block"; 
this.parentNode.lastChild.style.height="1px"; 
} 
this.h=window.setInterval(function(t,t1){ 
return function(){ 
if(!t1) return; 
if(parseInt(t.nextSibling.style.height)>3){ 
if(t!=t.parentNode.firstChild) 
t.previousSibling.style.height=parseInt(t.previousSibling.style.height)+3+"%"; 
else 
t.parentNode.lastChild.style.height=parseInt(t.parentNode.lastChild.style.height)+3+"%"; 
t1.style.height=parseInt(t1.style.height)-3+"%"; 
} 
else{ 
if(t!=t.parentNode.firstChild) 
t.previousSibling.style.height=100-_t.length*parseInt(a.all[0].style.height)+"%"; 
else 
t.parentNode.lastChild.style.height=100-_t.length*parseInt(a.all[0].style.height)+"%"; 
t.nextSibling.style.display="none"; 
t.nextSibling.style.height="0px"; 
window.clearInterval(t.h); 
} 
} 
}(this,(function(){ 
for(var ii=0;ii<a.all.length;ii++){ 
if(parseInt(a.all[ii].style.height)>10) 
return a.all[ii]; 
} 
})()),1); 
} 
} 
a.appendChild(h); 
a.appendChild(b); 
a.all[1].style.display="block"; 
a.all[1].style.height=100-t.length*parseInt(a.all[0].style.height)+"%"; 
} 
return a; 
} 
}

入口参数t是你要传递的二维数组,以一个标题加内容为一个数组项的形式:
下面是调用代码:
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<script src="kongjian.js" ></script>
<script>
var a=sx.activex.packmenu.create([["asd","sadsadas"],["sd","sadsaas"],["w","waedqwdq"],["e","efwefw"]]);
//a.contentEditable=true;
document.body.appendChild(a);
</script>
</body>
</html>
搞定,有兴趣的朋友可以看下效果.
Javascript 相关文章推荐
指定js可访问其它域名的cookie的方法
Sep 18 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
Nov 19 Javascript
javascript创建createXmlHttpRequest对象示例代码
Feb 10 Javascript
js 调用百度地图api并在地图上进行打点添加标注
May 13 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
Aug 24 Javascript
javascript表达式和运算符详解
Feb 07 Javascript
Express进阶之log4js实用入门指南
Feb 10 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
Sep 19 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
May 16 Javascript
简单聊聊TypeScript只读修饰符
Apr 06 Javascript
日历查询的算法 如何计算某一天是星期几
Dec 12 #Javascript
javascript实现日历控件(年月日关闭按钮)
Dec 12 #Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 #Javascript
用js判断页面是否加载完成实现代码
Dec 11 #Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
Dec 11 #Javascript
IE6浏览器下resize事件被执行了多次解决方法
Dec 11 #Javascript
什么是json和jsonp,jQuery json实例详详细说明
Dec 11 #Javascript
You might like
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
解析php取整的几种方式
2013/06/25 PHP
PHP如何使用Memcached
2016/04/05 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
JQuery 写的个性导航菜单
2009/12/24 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
Python抓取百度查询结果的方法
2015/07/08 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
Python守护进程实现过程详解
2020/02/10 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
香港交友网站:be2香港
2018/07/22 全球购物
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
就业意向书
2014/07/29 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
Ruby处理YAML和json数据
2022/04/18 Ruby