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 相关文章推荐
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
Dec 02 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
Jun 19 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
JavaScript实现表格快速变色效果代码
Aug 19 Javascript
Bootstrap树形控件使用方法详解
Jan 27 Javascript
使用Object.defineProperty实现简单的js双向绑定
Apr 15 Javascript
Bootstrap组件(一)之菜单
May 11 Javascript
Vue中的数据监听和数据交互案例解析
Jul 12 Javascript
Angular2实现组件交互的方法分析
Dec 19 Javascript
vuex进阶知识点巩固
May 20 Javascript
vue+express+jwt持久化登录的方法
Jun 14 Javascript
js在HTML的三种引用方式详解
Aug 29 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
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
php不使用copy()函数复制文件的方法
2015/03/13 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
PHP多进程编程实例详解
2017/07/19 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
chrome原生方法之数组
2011/11/30 Javascript
js转义字符介绍
2013/11/05 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
js实现简单的打印表格
2020/01/15 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
浅析Python中的for 循环
2016/06/09 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
python之生产者消费者模型实现详解
2019/07/27 Python
python中tab键是什么意思
2020/06/18 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
日期和时间问题
2015/01/04 面试题
实习心得体会
2014/01/02 职场文书
采购部经理岗位职责
2014/02/10 职场文书
火车的故事教学反思
2014/02/11 职场文书
2015年试用期工作总结
2014/12/12 职场文书
出生证明范本
2015/06/15 职场文书
母亲节主题班会
2015/08/14 职场文书
部门主管竞聘书
2015/09/15 职场文书
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python