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 相关文章推荐
使用正则替换变量
May 05 Javascript
jQuery之end()和pushStack()使用介绍
Feb 07 Javascript
Javascript中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
封装好的一个万能检测表单的方法
Jan 21 Javascript
javascript日期格式化方法汇总
Oct 04 Javascript
Javascript获取background属性中url的值
Oct 17 Javascript
react-router实现跳转传值的方法示例
May 27 Javascript
React Native之ListView实现九宫格效果的示例
Aug 02 Javascript
关于JavaScript的单双引号嵌套问题
Aug 20 Javascript
layer.confirm()右边按钮实现href的例子
Sep 27 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
Oct 24 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
Nov 09 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
学习使用PHP数组
2006/10/09 PHP
php&amp;java(二)
2006/10/09 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
js中的string.format函数代码
2020/08/11 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
python搭建微信公众平台
2016/02/09 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
python生成并处理uuid的实现方式
2020/03/03 Python
怎么快速自学python
2020/06/22 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
八年级英语教学计划
2015/01/23 职场文书
特此通知格式
2015/04/27 职场文书
干部理论学习心得体会
2016/01/21 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android