javascript 简单抽屉效果的实现代码


Posted in Javascript onMarch 09, 2010

css

<style type="text/css"> 
#bodycontainer 
{ 
height: 66px; 
} 
#leftcontainer 
{ 
background-color: #C5C5C5; 
float: left; 
border: 1px solid #C5C5C5; 
} 
</style>

aspx:
<div id="bodycontainer"> 
<div id="leftcontainer+<%#Container.ItemIndex+1 %>" style="display:none;"> 
<%#hiSoft.AMS.BLL.BAssetAlteration.getActionLinksString(Eval("ID"), g_Sites, g_Permission)%> 
</div> 
<div> 
<img title="show" alt="open" src="Images/x16.gif" id="showleft+<%#Container.ItemIndex+1 %>" onclick="var leftslider = new slider(this,1,50,85,20,1,20);leftslider.show();this.style.display='none';Show(this);"/> 
<script type="text/javascript"> 
function Show(a) { 
//a.style.display = 'none'; 
document.getElementById(a.parentElement.children[2].id).style.display = ''; 
} 
</script> 
<img title="hidden" alt="close" src="Images/x16.gif" id="hideleft+<%#Container.ItemIndex+1 %>" onclick="var leftslider = new slider(this,1,50,85,20,1,20);leftslider.hide();this.style.display='none';document.getElementById(this.parentElement.children[0].id).style.display='';" style="display:none " /> 
</div> 
</div> 
 

slider.js:
slider.names = new Array(); 
function slider() 
{ 
this.id = slider.names.length; 
slider.names[this.id] = this; 
this.target = document.getElementById(arguments[0].parentElement.parentElement.children[0].id); //第一个参数:被操作div的id 
this.direction = arguments[1];//第二个参数:div弹出的方向 
this.height = arguments[2];//第三个参数:div的高度 
this.width = arguments[3];//第四个参数:div的宽度 
this.step = arguments[4];//第五个参数:希望动作分解为几步完成 
this.timer = 10 * arguments[5];//第六个参数:每个动作的间隔时间,10ms为一个单位 
this.startopa = arguments[6];//第七个参数:div开始的透明度 
this.sparent = this.target.parentNode;//获取操作div的父容器 
this.intervalid = null;//循环定时的id 
this.i = 0;//循环的计数器 
this.status = 0;//slider层的状态:0-可以展开;1-不可以展开 
this.target.style.display = "none";//先将div隐去 
return this; 
} 
slider.prototype.initialize = function() 
{ 
this.sparent.style.overflow = "hidden";//设置父容器overflow 
this.target.style.width = Number(this.width) + 'px';//设置目标div的宽度 
this.target.style.height = Number(this.height) + 'px';//设置目标div的高度 
this.target.style.position = "";//设置目标div的定位方式 
this.target.style.display = "";//设置目标div的显示方式 
this.target.style.filter = 'Alpha(opacity=' + Number(this.startopa) + ')';//设置目标div的透明度为初始透明度 
this.target.style.overflow = "hidden";//设置overflow 
switch(this.direction)//根据弹出方向设定div的margin 
{ 
case 1://left to right 
this.target.style.marginLeft = "-" + this.width + "px"; 
break; 
case 2://top to bottom 
this.target.style.marginTop = "-" + this.height + "px"; 
break; 
case 3://right to left 
this.target.style.marginRight = "-" + this.width + "px"; 
break; 
} 
} 
slider.prototype.show = function() 
{ 
if (this.status==0)//检查状态是否已经展开 
{ 
this.initialize();//操作div及其父容器的初始化 
this.intervalid = window.setInterval("slider.names["+this.id+"].cycle()",this.timer);//设置动作循环 
} 
} 
slider.prototype.hide = function() 
{ 
if (this.status==1)//检查状态是否已经展开 
{ 
this.intervalid = window.setInterval("slider.names["+this.id+"].decycle()",this.timer);//设置动作循环 
} 
} 
slider.prototype.cycle = function() //单步循环动作 
{ 
var opa = this.target.style.filter.split("=")[1].split(")")[0]//获取目标div的透明度数值 
var opastep = Math.round(((100 - Number(opa)) / this.step)+2.5);//计算每步增加的透明度 
var nopa = Number(opa) + Number(opastep);//当前透明度 
if (nopa>100){this.target.style.filter = 'Alpha(opacity=100)';}else{this.target.style.filter = 'Alpha(opacity=' + String(nopa) + ')';}//给div透明度赋值 
switch(this.direction)//根据弹出方向计算和设定div的动作 
{ 
case 1: //left to right 
var opx = this.target.style.marginLeft.split("px")[0]; 
var pxstep = Math.round((this.width / this.step)+0.5); 
var npx = Number(opx) + Number(pxstep); 
if (npx>0){this.target.style.marginLeft = '0px';}else{this.target.style.marginLeft = String(npx) + 'px';} 
break; 
case 2: //top to bottom 
var opx = this.target.style.marginTop.split("px")[0]; 
var pxstep = Math.round((this.height / this.step)+0.5); 
var npx = Number(opx) + Number(pxstep); 
if (npx>0){this.target.style.marginTop = '0px';}else{this.target.style.marginTop = String(npx) + 'px';} 
break; 
case 3: //right to left 
var opx = this.target.style.marginRight.split("px")[0]; 
var pxstep = Math.round((this.width / this.step)+0.5); 
var npx = Number(opx) + Number(pxstep); 
if (npx>0){this.target.style.marginRight = '0px';}else{this.target.style.marginRight = String(npx) + 'px';} 
break; 
} 
this.i++ //计数器+1 
if (this.i>(this.step-1)){window.clearInterval(this.intervalid);this.i=0;this.status=1;} //循环完毕,清除循环定时 
} 
slider.prototype.decycle = function() //单步循环动作 
{ 
var opa = this.target.style.filter.split("=")[1].split(")")[0]//获取目标div的透明度数值 
var opastep = Math.round(((100 - Number(opa)) / this.step)+2.5)*2;//计算每步增加的透明度 
var nopa = Number(opa) - Number(opastep);//当前透明度 
if (nopa<this.startopa){this.target.style.filter = 'Alpha(opacity=' + this.startopa + ')';}else{this.target.style.filter = 'Alpha(opacity=' + String(nopa) + ')';}//给div透明度赋值 
switch(this.direction)//根据弹出方向计算和设定div的动作 
{ 
case 1: //left to right 
var opx = this.target.style.marginLeft.split("px")[0]; 
var pxstep = Math.round((this.width / Math.round(this.step*0.5))+0.5); 
var npx = Number(opx) - Number(pxstep); 
if (Math.abs(npx)>this.width+2){this.target.style.marginLeft = '-' + this.width + 'px';}else{this.target.style.marginLeft = String(npx) + 'px';} 
break; 
case 2: //top to bottom 
var opx = this.target.style.marginTop.split("px")[0]; 
var pxstep = Math.round((this.height / Math.round(this.step*0.5))+0.5); 
var npx = Number(opx) - Number(pxstep); 
if (Math.abs(npx)>this.height+2){this.target.style.marginTop = '-' + this.height + 'px';}else{this.target.style.marginTop = String(npx) + 'px';} 
break; 
case 3: //right to left 
var opx = this.target.style.marginRight.split("px")[0]; 
var pxstep = Math.round((this.width / Math.round(this.step*0.5))+0.5); 
var npx = Number(opx) - Number(pxstep); 
if (Math.abs(npx)>this.width+2){this.target.style.marginRight = '-' + this.width + 'px';}else{this.target.style.marginRight = String(npx) + 'px';} 
break; 
} 
this.i++ //计数器+1 
if (this.i>(Math.round(this.step*0.5)-1)){window.clearInterval(this.intervalid);this.i=0;this.status=0;this.target.style.display = "none";} //循环完毕,清除循环定时 
}
Javascript 相关文章推荐
javascript中的作用域scope介绍
Dec 28 Javascript
浅析IE10兼容性问题(frameset的cols属性)
Jan 03 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
js变量、作用域及内存详解
Sep 23 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
Jun 05 Javascript
Ajax清除浏览器js、css、图片缓存的方法
Aug 06 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
Oct 01 Javascript
JS常用倒计时代码实例总结
Feb 07 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
解决百度Echarts图表坐标轴越界的方法
Oct 17 Javascript
jquery实现进度条状态展示
Mar 26 jQuery
Javascript常考语句107条收集
Mar 09 #Javascript
风吟的小型JavaScirpt库 (FY.JS).
Mar 09 #Javascript
Jquery实现无刷新DropDownList联动实现代码
Mar 08 #Javascript
JavaScript this调用规则说明
Mar 08 #Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 #Javascript
JavaScript中的闭包原理分析
Mar 08 #Javascript
ExtJS GridPanel 根据条件改变字体颜色
Mar 08 #Javascript
You might like
如何隐藏你的.php文件
2007/01/04 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php获取域名的google收录示例
2014/03/24 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
js的event详解。
2006/09/06 Javascript
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
常用DOM整理
2015/06/16 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
js面向对象的写法
2016/02/19 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
TensorFlow损失函数专题详解
2018/04/26 Python
Python闭包思想与用法浅析
2018/12/27 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
英语专业学生个人求职信范文
2014/01/06 职场文书
年会主持词结束语
2014/03/27 职场文书
志愿者活动总结范文
2014/04/26 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
大学生见习报告范文
2014/11/03 职场文书
考试作弊检讨书
2015/01/27 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
2015年公司工作总结
2015/04/25 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
spring boot实现文件上传
2022/08/14 Java/Android