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控制表单提交的方法
Jul 09 Javascript
js确认框confirm()用法实例详解
Jan 07 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
Jun 17 Javascript
浅谈$_FILES数组为空的原因
Feb 16 Javascript
Bootstrap缩略图的创建方法
Mar 22 Javascript
JavaScript实现弹出广告功能
Mar 30 Javascript
jQuery图片加载失败替换默认图片方法汇总
Nov 29 jQuery
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
Aug 27 Javascript
基于JS判断对象是否是数组
Jan 10 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 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
php分页函数
2006/07/08 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
Python实现多线程下载文件的代码实例
2014/06/01 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
《美丽的田园》教学反思
2014/03/01 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
英文升职感谢信
2015/01/23 职场文书
防暑降温通知书
2015/04/27 职场文书
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript