jquery封裝了一個簡潔輕巧的可拖動可自訂樣式的純div+css帶遮罩層的仿模態彈出框,jquery模態

來源:互聯網
上載者:User

jquery封裝了一個簡潔輕巧的可拖動可自訂樣式的純div+css帶遮罩層的仿模態彈出框,jquery模態

        最近封裝上癮,想起以前做的一個輕巧的彈出框,是樣式和指令碼分離的,於是重新封裝了一下,把樣式標籤統一到js裡了。
裡面還有一些問題,但不影響使用,有興趣的同學,可以參考完善下,有好的建議,請不吝賜教。


var PopDialogDefaultConfig = {    hasCover: true,                             //是否帶遮罩層    colorOfCover: "#000",                       //遮罩層顏色    transparencyOfCover: 80,                    //遮罩層透明度(alpha值,opacity值通過換算得到)    borderColor: "blue",                        //邊框標題背景顏色    titleHeight: 50,                            //標題高度    titleFont: '24px "Microsoft Yahei"',        //標題字型    titleFontSize: 24,                          //標題文字大小    titleColor: "white",                        //標題文字顏色    titleFontFamily: "Microsoft Yahei",         //標題字型    contentWidth: 560,                          //內容框寬度    contentHeight: 480,                         //內容框的高度    borderWidth: 2,                             //邊框寬度    backColor: "#EC90F6",                       //背景色    serial: 1,                                  //序號    moveAble: true,                             //是否可以滑鼠拖動    /*      * 設定檔合并      */    Merge: function (newConfig) {        var result = {};        for (var p in this) {            result[p] = this[p];            if (typeof (this[p]) != " function ") {                for (var q in newConfig) {                    if (p == q) {                        result[p] = newConfig[q];                    }                }            }        }        return result;    }};function PopDialog(content, title, popDialogConfig) {    content = content || "這裡什麼都沒有!";    title = title || "提示";    var dialog = new Object;    /*      * 彈出框的預設樣式     */    var config = PopDialogDefaultConfig.Merge(popDialogConfig);    /*      * 根據設定檔和彈出對象,取得彈出框的html串;     */    if (!config.id) {        config.id = "pop" + config.serial;        PopDialogDefaultConfig.serial++;    }    var opacity = (100 - config.transparencyOfCover) / 100;    var width = config.contentWidth + config.borderWidth * 2;    var height = config.contentHeight + config.borderWidth + config.titleHeight;    dialog.Html = (config.hasCover ? '<div id="' + config.id + '_Cover" style="background-color: ' + config.colorOfCover + ';width:100%;height:100%;position:absolute;filter: alpha(opacity=' + config.transparencyOfCover + ');opacity:' + opacity + ';top:0;left:0;"></div>' : "")        + '<div id="' + config.id + '_Dialog" style="background-color:' + config.borderColor + ';position:absolute;width: ' + width + 'px;height: ' + height + 'px;top:calc(50% - ' + height / 2 + 'px);left:calc(50% - ' + width / 2 + 'px);">'        + '    <div id="' + config.id + '_Top" style="height:' + config.titleHeight + 'px;line-height:' + config.titleHeight + 'px;display:block;width:100%;background-color:' + config.borderColor + ';clear:both;vertical-align:middle">'        + '        <span id="' + config.id + '_Title" style="display:inline-block;font-size:' + config.titleFontSize + 'px;padding-left:10px;color:' + config.titleColor + ';">' + (title || "提示") + '</span>'        + '        <a id="' + config.id + '_Close" style="display:block;float:right;text-decoration: none;margin-right:20px;clear:right;color:white;font-size:' + config.titleHeight * 8 / 10 + 'px;" href="#">X</a>'        + '    </div>'        + '    <div id="' + config.id + '_Content" style="background-color:' + config.backColor + ';width:' + config.contentWidth + 'px;height:' + config.contentHeight + 'px;border:' + config.borderWidth + 'px solid ' + config.borderColor + ';">' + content + '</div>'        + '</div>';    dialog.Config = config;    dialog.PopDom = $(dialog.Html);    var top = dialog.PopDom.find("#" + config.id + "_Top");    var parent = $(dialog.PopDom[1]);    var close = dialog.PopDom.find("#" + config.id + "_Close");    /*      * 綁定關閉按鈕事件     */    close.bind("click", function () {        var popdialog = $("#" + config.id + "_Dialog");        if (popdialog && popdialog != undefined) {            popdialog.remove();        }        var popcover = $("#" + config.id + "_Cover");        if (popcover && popcover != undefined) {            popcover.remove();        }        PopDialogDefaultConfig.serial--;    })    /*      * 滑鼠拖動彈出框     */    dialog.x = dialog.y = dialog.mousekey = 0;    if (config.moveAble) {        top.bind("mousedown", function (event) {            dialog.mousekey = true;            top.css("cursor", "move");            dialog.x = event.pageX - parseInt(parent.css("left"));            dialog.y = event.pageY - parseInt(parent.css("top"));            parent.fadeTo(20, 0.5);//點擊後開始拖動並透明        }).mouseout(function () {            dialog.mousekey = false;            top.css("cursor", "default");            parent.fadeTo("fast", 1);//鬆開滑鼠後停止移動並恢複成不透明        });        $(document).mousemove(function (e) {            if (dialog.mousekey) {                parent.css({ top: e.pageY - dialog.y, left: e.pageX - dialog.x });            }        }).mouseup(function () {            dialog.mousekey = false;            top.css("cursor", "default");            parent.fadeTo("fast", 1);//鬆開滑鼠後停止移動並恢複成不透明        });    }    return dialog;};/*  * 拓展jquery對象的方法; */(function ($) {    /*      * 關閉彈出框的方法     * serial: 關閉的彈出框內部對象編號     * Example: $(document.body).ClosePopDialog(1);     */    $.fn.ClosePopDialog = function (serial) {        var popdialog = $("#pop" + serial + "_Dialog");        if (popdialog && popdialog != undefined) {            popdialog.remove();        }        var popcover = $("#pop" + serial + "_Cover");        if (popcover && popcover != undefined) {            popcover.remove();        }    };    /*      * 根據url取得內容並彈出框顯示的方法     * url: 需要顯示的內容的url     * title: 標題     * popDialogConfig: 自訂樣式     * Example: $(document.body).PopDialog("/home/login", "Test Url", { backColor: "gray", borderColor: "blue", borderWidth: 2, contentWidth: 600, contentHeight: 480 });     */    $.fn.PopDialogByUrl = function (url, title, popDialogConfig) {        var obj = $(this);        if (url) {            $.ajax({                url: url,                cache: false,                success: function (result) {                    if (result == "[]" || result == "") {                        result = "系統忙,請稍後再試!";                    }                    var pop = new PopDialog(result, title, popDialogConfig);                    obj.append(pop.PopDom);                },                error: function (result) {                    if (result == "[]" || result == "") {                        result = "系統錯誤,請聯絡管理員!";                    }                    var pop = new PopDialog(result, title, popDialogConfig);                    obj.append(pop.PopDom);                }            });        }    };    /*      * 彈出框顯示提供的內容的方法     * content: 需要顯示的內容     * title: 標題     * popDialogConfig: 自訂樣式     * Example: $(document.body).PopDialog("<div>這是一個彈出框的例子!</div>", "Test Content", { backColor: "gray", borderColor: "blue", borderWidth: 2, contentWidth: 600, contentHeight: 480 });     */    $.fn.PopDialogByContent = function (content, title, popDialogConfig) {        var pop = new PopDialog(content, title, popDialogConfig);        $(this).append(pop.PopDom);    };})(jQuery);


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.