div弹出对话框(动画效果)

JS代码

文件名称:my400800.cn.js

 var menuOC=function()
{
    this.menuPoint={prox:null,proy:null,proxc:null,proyc:null,width:null,height:null};
    this.menuObj=document.getElementById(arguments[0]);
    this.menuMask=null;
    this.canMove=false;
    this.getMaxWH();
    if(arguments[1])
    {
        this.canMove=arguments[1];
    }
    if(document.all)
    {
        //为IE添加遮罩iframe,用于遮盖页面上的select
        if(document.getElementsByTagName("select").length>0)
        {
            //寻找遮罩
            var masks=document.getElementsByTagName("iframe");
            for(var i=0;i<masks.length;i++)
            {
                if(masks[i].getAttribute("move_mask")=="move_mask")
                {
                    this.menuMask=masks[i];
                    break;
                }
            }
            if(this.menuMask==null)
            {
                with(this.menuObj)
                {
                    style.zIndex=(style.zIndex||0)<2?2:style.zIndex;
                }
                this.menuMask=document.createElement("iframe");
                with(this.menuMask)
                {
                    setAttribute("move_mask","move_mask");
                    src="javascript:''";
                    scrolling="no";
                    frameBorder="0";
                    style.position="absolute";
                    style.zIndex=this.menuObj.style.zIndex-1;
                    var curBorder=this.menuObj.currentStyle["borderWidth"];
                    style.top=parseInt(this.menuObj.currentStyle["top"])+parseInt(curBorder)+"px";
                    style.left=parseInt(this.menuObj.currentStyle["left"])+parseInt(curBorder)+"px";
                    style.width=parseInt(this.menuObj.currentStyle["width"])+2*parseInt(curBorder)+"px";
                    style.height=parseInt(this.menuObj.currentStyle["height"])+2*parseInt(curBorder)+"px";
                }
                this.menuObj.parentNode.appendChild(this.menuMask);
            }
        }
    }
};
menuOC.prototype={
    getStyle:function(obj,stylename)//获取控件实际样式
    {
        var curVal="";
        if (obj.currentStyle)
        {
            curVal=obj.currentStyle[stylename]
        }
        else
        {
            curVal=document.defaultView.getComputedStyle(obj, null)[stylename];
        }
        return curVal;
    },
    getMaxWH:function()//获取初始宽度高度
    {
        with(this.menuObj)
        {
            var width=getAttribute("maxwidth");
            if(width==null || width=="")
            {
                width=parseInt(this.getStyle(this.menuObj,"width"));
                setAttribute("maxwidth",width);
            }
            var height=getAttribute("maxheight");
            if(height==null || height=="")
            {
                height=parseInt(this.getStyle(this.menuObj,"height"));
                setAttribute("maxheight",height);
            }
            this.menuPoint.width=width;
            this.menuPoint.height=height;
        }
    },
    show:function()//显示
    {
        this.clearInterval();
        this.moveInit();
        with(this.menuObj.style)
        {
            display = "block";
            width = "1px";
            height = "1px";
        }
        if(this.menuMask!=null)
        {
            with(this.menuMask.style)
            {
                display = "block";
                width = "1px";
                height = "1px";
            }
        }
        var self=this;
        this.menuPoint.prox=setInterval(function(){self.openx(self.menuPoint.width,self.menuObj,self.menuMask);},10);
    },
    hidden:function()//关闭
    {
        this.clearInterval();
        if(this.menuObj.style.display == "block")
        {
            var self=this;
            this.menuPoint.proyc=setInterval(function(){self.closey(self.menuObj,self.menuMask);},10);
        }
    },
    openx:function(x,obj,mask)//横向打开
    {
        var cx = parseInt(obj.style.width);
        if(cx < x)
        {
            obj.style.width = (cx + Math.ceil((x-cx)/5)) +"px";
            if(mask!=null)
            {
                mask.style.width=parseInt(obj.style.width)+2*parseInt(parseInt(this.getStyle(obj,"borderWidth")))+"px";
            }
        }
        else
        {
            clearInterval(this.menuPoint.prox);
            var self=this;
            this.menuPoint.proy=setInterval(function(){self.openy(self.menuPoint.height,self.menuObj,self.menuMask);},10);
        }
    },
    openy:function(y,obj,mask)//纵向打开
    {
        var cy = parseInt(obj.style.height);
        if(cy < y)
        {
            obj.style.height = (cy + Math.ceil((y-cy)/5)) +"px";
            if(mask!=null)
            {
                mask.style.height=parseInt(obj.style.height)+2*parseInt(parseInt(this.getStyle(obj,"borderWidth")))+"px";
            }
        }
        else
        {
            clearInterval(this.menuPoint.proy);
        }
    },
    closey:function(obj,mask)//纵向关闭
    {
        var cy = parseInt(obj.style.height);
        if(cy > 0)
        {
            obj.style.height = (cy - Math.ceil(cy/5)) +"px";
            if(mask!=null)
            {
                mask.style.height=parseInt(obj.style.height)+2*parseInt(parseInt(this.getStyle(obj,"borderWidth")))+"px";
            }
        }
        else
        {
            clearInterval(this.menuPoint.proyc);
            var self=this;
            this.menuPoint.proxc=setInterval(function(){self.closex(self.menuObj,self.menuMask);},10);
        }
    },
    closex:function(obj,mask)//横向关闭
    {
        var cx = parseInt(obj.style.width);
        if(cx > 0)
        {
            obj.style.width = (cx - Math.ceil(cx/5)) +"px";
            if(mask!=null)
            {
                mask.style.width=parseInt(obj.style.width)+2*parseInt(parseInt(this.getStyle(obj,"borderWidth")))+"px";
            }
        }
        else
        {
            clearInterval(this.menuPoint.proxc);
            obj.style.display = "none";
            if(mask!=null)
            {
                mask.style.display=obj.style.display;
            }
        }
    },
    clearInterval:function()//取消循环
    {
        clearInterval(this.menuPoint.prox);
        clearInterval(this.menuPoint.proy);
        clearInterval(this.menuPoint.proxc);
        clearInterval(this.menuPoint.proyc);
    },
    /*-------------------------鼠标拖动---------------------*/
    moveInit:function()//初始化拖动
    {
        if(this.canMove)
        {
            //允许拖动
            this.startParam={x0:0,y0:0,x1:0,y1:0};
            this.moveable=false;
            var self=this;
            with(this.menuObj)
            {
                style.zIndex=(style.zIndex||0)<2?2:style.zIndex;
                onmousedown=function(){self.startMove();};
            }
            this.cancelBubble();
        }
    },
    cancelBubble:function()//为图层内部控件取消事件冒泡
    {
        var objTagName=["input","select","textarea","a","button"];
        var self=this;
        for(var i=0;i<objTagName.length;i++)
        {
            with(this.menuObj)
            {
                var objs=getElementsByTagName(objTagName[i]);
                for(var j=0;j<objs.length;j++)
                {
                    objs[j].onmousedown=function()
                    {
                        var evt=window.event || arguments[0];
                        if (evt.preventDefault)
                        {
                            evt.stopPropagation();
                        }
                        else
                        {
                            evt.cancelBubble = true;
                            evt.returnValue = false;
                        }
                    };
                }
            }
        }
    },
    movePoint:function(px,py)//坐标点
    {
        this.x=px;
        this.y=py;
    },
    getEvent:function()//获取事件对象
    {
        return window.event || arguments.callee.caller.caller.arguments[0];
    },
    getMousePoint:function(evt)//获取鼠标坐标
    {
        var pt=new this.movePoint(0,0);
        if(document.all)
        {
            pt.x=evt.clientX;
            pt.y=evt.clientY;
        }
        else
        {
            pt.x=evt.pageX;
            pt.y=evt.pageY;
        }
        return pt;
    },
    startMove:function()//开始移动
    {
        if(document.all)
        {
            this.menuObj.setCapture();
            this.menuObj.filters.alpha.opacity=50;
        }
        else
        {
            if(window.captureEvents)
            {
                window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
                this.menuObj.style.opacity=0.5;
            }
        }
        var evt=this.getEvent();
        with(this.getMousePoint(evt))
        {
            this.startParam.x0=x;
            this.startParam.y0=y;
        }
        with(this.menuObj)
        {
            this.startParam.x1=offsetLeft;
            this.startParam.y1=offsetTop;
        }
        this.moveable=true;
        var self=this;
        if(document.all)
        {    
            this.menuObj.onmousemove=function(){self.Moveing(self.menuMask);};
            this.menuObj.onmouseup=function(){self.endMove();};
        }
        else
        {
            document.onmousemove=function(){self.Moveing();};
            document.onmouseup=function(){self.endMove();};
        }
    },
    Moveing:function()//移动中
    {
        if(this.moveable)
        {
            var tmp_left,tmp_top,evt=this.getEvent();
            with(this.getMousePoint(evt))
            {
                tmp_left=(x+this.startParam.x1-this.startParam.x0);
                tmp_top=(y+this.startParam.y1-this.startParam.y0);
            }
                
            with(this.menuObj)
            {
                style.left=tmp_left+"px";
                style.top=tmp_top+"px";
                if(arguments[0])
                {
                    var curBorder=currentStyle["borderWidth"];
                    arguments[0].style.left=parseInt(style.left)+2*parseInt(curBorder)+"px";
                    arguments[0].style.top=parseInt(style.top)+2*parseInt(curBorder)+"px";
                }
            }
        }
    },
    endMove:function()//结束移动
    {
        if(document.all)
        {
            this.menuObj.releaseCapture();
            this.menuObj.filters.alpha.opacity=100;
        }
        else
        {
            if(window.releaseEvents)
            {
                window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
                this.menuObj.style.opacity=1;
            }
            document.onmousemove=null;
            document.onmouseup=null;

        }
        this.moveable=false;
    }
};
var menuOC_obj=null;
function openBox()
{
    if(menuOC_obj==null)
    {
        menuOC_obj=new menuOC("activeBox",true);
    }
    menuOC_obj.show();
}
function closeBox()
{
    menuOC_obj.hidden();
}

调用代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JS打开关闭移动层动画实例 - 星辰创想</title>
<script type="text/javascript" src="http://www.my400800.cn/js/www.my400800.cn.js"></script>
<style type="text/css">
a.title_close{position:absolute; right:3px; top:3px;display:block; width:32px; height:18px; overflow:hidden; background-position:0px 0px;}
.scrollBox{
    width:500px;
    height:200px;
    background:#EDF1F8;
    border: 1px solid #849BCA;
    overflow:hidden;
    position:absolute;
    left:200px;
    top:100px;
    cursor:move;
    filter:alpha(opacity=100);
    opacity:1;
    display:none;
}
.content{
    padding:10px;
}
</style>
</head>
<body>
<a href="#" onclick = "openBox();return false;">[打开层]</a>
<div id="activeBox" class="scrollBox">
<a href="#" class="title_close" onclick="closeBox();return false;" title="关闭">关闭</a>
<div class="content">移动层<form action="javascript:void(0);"><input type="text" value="aa" /><select><option>1111</option><option>2222</option><option>3333</option></select><input type="submit" name="submitBotton" value="提交" /></form>11111111111</div>
</div>
<iframe width="0px" height="0px" scrolling="no" frameborder="0" src="about:blank" />
</body>
</html>

posted @ 2009-11-09 10:34  ljlxyf  阅读(451)  评论(0编辑  收藏  举报