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 相关文章推荐
JavaScript 的继承
Oct 01 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
Dec 11 Javascript
jquery中实现时间戳与日期相互转换
Apr 12 Javascript
Bootstrap被封装的弹层
Jul 20 Javascript
jQuery+Pdo编写login登陆界面
Aug 01 Javascript
JS简单实现点击复制链接的方法
Aug 03 Javascript
浅谈react受控组件与非受控组件(小结)
Feb 09 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
JavaScript Window浏览器对象模型原理解析
May 30 Javascript
2分钟实现一个Vue实时直播系统的示例代码
Jun 05 Javascript
eslint+prettier统一代码风格的实现方法
Jul 22 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
Aug 24 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
Python列表推导式的使用方法
2013/11/21 Python
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
Python里disconnect UDP套接字的方法
2015/04/23 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
医学生求职自荐信
2013/10/25 职场文书
安全生产投入制度
2014/01/29 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
钳工实训报告总结
2014/11/04 职场文书
学生检讨书
2015/01/27 职场文书