纯js自定义弹窗

/**

 * 弹窗

 

 * 获取弹窗内穿出的数据:

 *     在弹窗页面调用父级页面的方法,例:parent.xxx(data);

 * 在 xxx()方法中将获取到的数据赋值给 abc 变量;在的点击弹

 * 窗确定按钮后调用 yyy()方法,将 abc 变量的值填充到页面的

 * 某处。

 

 * @param idName String 弹窗ID,不可重复

 * @param src String    要打开窗口的url

 * @param func function 回调函数,点击确定按钮后执行

 * @param title String  弹窗标题

 * @param divW int      弹窗宽度

 * @param divH int      弹窗高度

 * @param bottun boolean  是否显示确定按钮

 * @param topSize int   position的top值,距离顶部的距离,可用百分比

 * @param leftSize int  position的left值,距离顶部的距离,可用百分比

 

 * 可选参数可以填 null

 * function popup(idName,src[,func][,title][,divW][,divH][,bottun][,topSize][,leftSize]);

 */

function popup(idName,src,func,title,divW,divH,bottun,topSize,leftSize){

    if(typeof idName == 'undefined'){alert('ID名称没有');return;}

    if(typeof src == 'undefined'){alert('src没有');return;}

    if(typeof title == 'undefined'){title = '这是标题';}

    if(typeof func != 'function'){func = function(){}  }

     

    //弹窗宽度和高度

    var divW = (typeof divW == 'number') ? divW : 700;

    var divH = (typeof divH == 'number') ? divH : 500;

    //底边栏高度

    var divBottomH = (bottun == true) ? 40 : 30;

    var topSize = (typeof topSize == 'number' || typeof topSize == 'string' ) ? topSize : '3%';

    var leftSize = (typeof leftSize == 'number' || typeof leftSize == 'string' ) ? leftSize : '15%';

     

    var divTopH = 30;        //标题高度

    var divMiddleH = divH - divTopH - divBottomH;//iframe高度

     

    var div            = document.createElement('div');

    var divTop     = document.createElement('div');

    var divBigSmall    = document.createElement('div');

    var divClose       = document.createElement('div');

    var divLittle      = document.createElement('div');

    var divMiddle  = document.createElement('div');

    var divBottom      = document.createElement('div');

    var divBottonOk        = document.createElement('div');

    var divBottonCancel    = document.createElement('div');

    var divWiden       = document.createElement('div');

     

    //div 样式

    div.style.cssText = "width:"+divW+"px;height:"+divH+"px;position:fixed;top:"+topSize+";left:"+leftSize+";z-index:999;display:block;font-size:16px;font-family:Arial,'Microsoft YaHei';font-weight:bold;border:1px solid #3377bb;overflow:hidden;";

    div.id = idName;

    div.innerHTML = '';

     

    //divTop 样式

    divTop.style.cssText = "width:100%;height:"+divTopH+"px;line-height:"+divTopH+"px;text-indent:20px;color:#fff;background:#5599dd;cursor:move;";

    divLittle.style.cssText = "width:15px;height:13px;float:right;margin:8px 12px 0 0;cursor:pointer;border: 1px solid #fff;line-height:11px;text-indent:5px;font-weight:normal;";

    divBigSmall.style.cssText = "width:15px;height:13px;float:right;margin:8px 10px 0 0;cursor:pointer;border: 1px solid #fff;";

    divClose.style.cssText = "width:15px;height:13px;float:right;margin:8px 12px 0 0;cursor:pointer;border: 1px solid #fff;line-height:10px;text-indent:4px;font-weight:normal;font-size:13px;";

    divTop.innerHTML = title;

    divLittle.innerHTML = '-';

    divClose.innerHTML = 'x';

    //divMiddle 样式

    divMiddle.style.cssText = "width:100%;background:#fafaff;height:"+divMiddleH+"px;";

    divMiddle.innerHTML = '<iframe src="'+src+'" id="popup'+idName+'" name="popup'+idName+'" frameborder="0" width="100%" height="100%"></iframe>';

     

    //divBottom 样式

    divBottom.style.cssText = "width:100%;height:"+divBottomH+"px;background:#fafaff;";

    //ok cancel 样式

    var bottonH = 25;

    divBottonOk.style.cssText = "width:60px;height:"+bottonH+"px;float:right;line-height:"+bottonH+"px;background:#3377bb;cursor:pointer;text-align:center;color:white;margin:8px 20px 0 0;";

    divBottonCancel.style.cssText = "width:60px;height:"+bottonH+"px;float:right;line-height:"+bottonH+"px;background:#3377bb;cursor:pointer;text-align:center;color:white;margin:8px 20px 0 0;";

    divBottonOk.innerHTML = '确定';

    divBottonCancel.innerHTML = '取消';

    //右下拉动窗口 样式

    divWiden.style.cssText = "width:10px;height:10px;position:absolute;bottom:0px;right:0px;cursor:se-resize;";

    //OK 事件

    divBottonOk.onclick = function (){

        func();

        document.body.removeChild(div);

    }

    //cancel 事件

    divClose.onclick = divBottonCancel.onclick = function (){

        document.body.removeChild(div);

    }

    //移动窗口事件

    var L = null;    //上一次移动div后的div.style.left的值

    var T = null;

    divTop.onmousedown = function(e){

        var e = e || event;

        var left = e.clientX - div.offsetLeft;

        var top = e.clientY - div.offsetTop;

        document.onmousemove = function (ev){

            var ev = ev || event;

            L = div.style.left = ev.clientX - left + 'px';

            T = div.style.top = ev.clientY - top + 'px';

        }

        document.onmouseup = function (){

            document.onmousemove = null;

            document.onmouseup = null;

        }

    }

    //窗口放大缩小

    divBigSmall.onclick = divTop.ondblclick = function (){

        if(document.body.offsetWidth != div.offsetWidth - 2){

            div.style.top = '0px';

            div.style.left = '0px';

            div.style.width = '100%';

            div.style.height = '100%';

            divMiddle.style.height = div.offsetHeight - divTopH - divBottomH - 2 +'px';

        }else{

            if(L && T){

                div.style.top = T;

                div.style.left = L;

            }else{

                div.style.top = '5%';

                div.style.left = '15%';

            }

            div.style.width = divW+'px';

            div.style.height = divH+'px';

            divMiddle.style.height = divMiddleH+'px';

        }

    }

    //拉动改变窗口大小

    var W = null;

    var H = null;

    divWiden.onmousedown = function (e){

        var e = e || event;

        var X = e.clientX;

        var Y = e.clientY;

        divW = div.offsetWidth;

        divH = div.offsetHeight;

        document.onmousemove = function (ev){

            var ev = ev || event;

            W = ev.clientX - X;

            H = ev.clientY - Y;

            div.style.width = divW + W +'px';

            div.style.height = divH + H +'px';

            divMiddleH = div.offsetHeight - divTopH - divBottomH - 2;

            divMiddle.style.height = divMiddleH+'px';

        }

        document.onmouseup = function (){

            document.onmousemove = null;

            document.onmouseup = null;

            divW = divW + W;

            divH = divH + H;

        }

    }

    //最小化

    divLittle.onclick = function (){

        if(div.offsetWidth != 202 && div.offsetHeight != divTopH+2){

            div.style.width = '200px';

            div.style.height = divTopH+'px';

        }else{

            div.style.width = divW+'px';

            div.style.height = divH+'px';

        }

    }

    div.appendChild(divTop);

    divTop.appendChild(divClose);

    divTop.appendChild(divBigSmall);

    divTop.appendChild(divLittle);

    div.appendChild(divMiddle);

    divBottom.appendChild(divWiden);

    if(bottun){

        divBottom.appendChild(divBottonCancel);

        divBottom.appendChild(divBottonOk);

    }

    div.appendChild(divBottom);

     

    if(!document.getElementById(idName)){

        document.body.appendChild(div);

    }

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值