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 函数集合
Jun 11 Javascript
仿jQuery的siblings效果的js代码
Aug 09 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
Jul 24 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
Dec 27 Javascript
javascript中对变量类型的判断方法
Aug 09 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
Aug 25 Javascript
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
JavaScript数据结构之单链表和循环链表
Nov 28 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 Javascript
vue2路由方式--嵌套路由实现方法分析
Mar 06 Javascript
JS实现网站楼层导航效果代码实例
Jun 16 Javascript
手写Vue源码之数据劫持示例详解
Jan 04 Vue.js
日历查询的算法 如何计算某一天是星期几
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入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
python处理两种分隔符的数据集方法
2018/12/12 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
如何写股份合作协议书
2014/09/11 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
护理实习生带教计划
2015/01/16 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
首席执行官观后感
2015/06/03 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
24年收藏2000多部退役军用电台
2022/02/18 无线电
Python读取和写入Excel数据
2022/04/20 Python