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 相关文章推荐
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
javascritp实现input输入框相关限制用法
Jun 29 Javascript
JavaScript 模仿vbs中的 DateAdd() 函数的代码
Aug 13 Javascript
js 操作css实现代码
Jun 11 Javascript
js substring从右边获取指定长度字符串(示例代码)
Dec 23 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
Feb 28 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
分享网页检测摇一摇实例代码
Jan 14 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
JavaScript使用闭包模仿块级作用域操作示例
Jan 21 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
Apr 26 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
python验证码识别的实例详解
2016/09/09 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
Python map及filter函数使用方法解析
2020/08/06 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
酒店管理自荐信
2013/10/23 职场文书
幼儿园园长岗位职责
2013/11/26 职场文书
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
医德医风自我评价2015
2015/03/03 职场文书
员工手册董事长致辞
2015/07/29 职场文书
Python软件包安装的三种常见方法
2022/07/07 Python