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去除空格的几种方法
Oct 03 Javascript
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
Oct 29 Javascript
javascript Object与Function使用
Jan 11 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
Jun 14 Javascript
javascript常用方法汇总
Dec 02 Javascript
JQuery基础语法小结
Feb 27 Javascript
js实现简单的省市县三级联动效果实例
Feb 18 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
May 19 Javascript
javascript 中Cookie读、写与删除操作
Mar 29 Javascript
vue组件中使用iframe元素的示例代码
Dec 13 Javascript
Vue官网todoMVC示例代码
Jan 29 Javascript
JS判断数组里是否有重复元素的方法小结
May 21 Javascript
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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
浅析javascript函数表达式
2016/02/10 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
使用Python开发windows GUI程序入门实例
2014/10/23 Python
Python BS4库的安装与使用详解
2018/08/08 Python
python实现电子产品商店
2019/02/26 Python
python多线程与多进程及其区别详解
2019/08/08 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
Python常用类型转换实现代码实例
2020/07/28 Python
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
生日宴会主持词
2014/03/20 职场文书
法人代表任命书范本
2014/06/05 职场文书
社区服务活动小结
2014/07/08 职场文书
销售顾问工作计划书
2014/08/15 职场文书
业务员岗位职责
2015/02/03 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js