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 相关文章推荐
html下载本地
Jun 19 Javascript
prototype 的说明 js类
Sep 07 Javascript
JS获取父节点方法
Aug 20 Javascript
Javascript控制页面链接在新窗口打开具体方法
Aug 16 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
Apr 02 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
Dec 19 Javascript
利用Javascript实现简单的转盘抽奖
Feb 13 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
Javascript中 toFixed四舍六入方法
Aug 21 Javascript
如何用webpack4带你实现一个vue的打包的项目
Jun 20 Javascript
详解小程序循环require之坑
Mar 08 Javascript
怎么使用javascript深度拷贝一个数组
Jun 06 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解决json_encode中文UNICODE转码问题
2020/11/10 PHP
jQuery前台数据获取实现代码
2011/03/16 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
vue实现分页栏效果
2019/06/28 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
Python字符串处理函数简明总结
2015/04/13 Python
python简单判断序列是否为空的方法
2015/06/30 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
详解python statistics模块及函数用法
2019/10/27 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
Python识别处理照片中的条形码
2020/11/16 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
高级护理实习生自荐信
2013/09/28 职场文书
园林毕业生自我鉴定范文
2013/12/29 职场文书
趣味比赛活动方案
2014/02/15 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
2014全年工作总结
2014/11/27 职场文书
承诺书范本大全
2015/05/04 职场文书
城南旧事观后感
2015/06/11 职场文书
公司周年庆典致辞
2015/07/30 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python