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 相关文章推荐
form中限制文本字节数js代码
Jun 10 Javascript
setAttribute 与 class冲突解决
Feb 17 Javascript
jQuery 下拉列表 二级联动插件分享
Mar 29 Javascript
使用js实现雪花飘落效果
Aug 26 Javascript
仿JQuery输写高效JSLite代码的一些技巧
Jan 13 Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 Javascript
Javascript获取background属性中url的值
Oct 17 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
Mar 20 Javascript
vue之数据交互实例代码
Jun 16 Javascript
JS实现头条新闻的经典轮播图效果示例
Jan 30 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
使用JavaScript计算前一天和后一天的思路详解
Dec 20 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
多重?l件?合查?(二)
2006/10/09 PHP
Windows下的PHP5.0详解
2006/11/18 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
php下过滤HTML代码的函数
2007/12/10 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
python实现发送邮件及附件功能
2021/03/02 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
Python列表元素常见操作简单示例
2019/10/25 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
年会主持词结束语
2014/03/27 职场文书
2014年端午节演讲稿范文
2014/05/23 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
公司车队管理制度
2015/08/04 职场文书
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android
一篇文章弄懂Python中的内建函数
2021/08/07 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python