jQuery弹出框代码封装DialogHelper


Posted in Javascript onJanuary 30, 2015

看了jQueryUI Dialog的例子,效果还不错,就是用起来有点儿别扭,写出的代码有点拧巴,需要再封装一下!于是就有了下面这个简单的DialogHelper辅助类,因为这篇文章分享的重点是思路,所以目前版本的代码也还非常粗糙。思路对了,后续再封装成什么样都不过是形式而已,希望这个思路能给大家点启迪,同时欢迎大家开拓思维,提出更好的改进意见。

//require ScrollHelper.js

function DialogHelper() {

    var _this = this;

    var doc = window.document;

    _this.maskDiv = null;

    _this.contentDiv = null;

    var options = {

        opacity: 0.4

    };

    this.popup = function (contentdiv, optionArg) {

        if (optionArg) {

            for (var prop in optionArg) {

                options[prop] = optionArg[prop];

            }

        }

        _this.contentDiv = contentdiv || _this.contentDiv;

        _this.maskDiv = $('<div>');

        _this.maskDiv.addClass('MaskDiv');

        _this.maskDiv.css({

            'filter': "Alpha(opacity=" + ( options.opacity - "0" ) * 100 + ");",

            'opacity': options.opacity,

            'display': 'block'

        });

        $(doc.body).append(_this.maskDiv);

        if (_this.contentDiv) {

            $(doc.body).append(_this.contentDiv);

            _this.contentDiv.show();

            _this.contentDiv.draggable({

                containment: "document",

                cursor: 'move',

                handle: ".Dialog_Head"

            });

            $(_this.maskDiv).on("mousemove", function() {

                $("body").preventScroll();

            });

            $(_this.maskDiv).on("mouseout", function() {

                $("body").liveScroll();

            });

            if ($(".cke").length == 0 && $(".Dialog_Body").length > 0) {

                $(".Dialog_Body").preventOuterScroll();

            }

        }

    };

    this.remove = function () {

        if (_this.contentDiv) {

            _this.contentDiv.remove();

        }

        if (_this.maskDiv) {

            _this.maskDiv.remove();

        }

        $("body").liveScroll();

    };

    this.formatPercentNumber = function (value, whole) {

        if (isNaN(value) && typeof value === "string") {

            if (value.indexOf("%") !== -1) {

                value = (value.replace("%", "") / 100) * whole;

            } else if (value.indexOf("px") !== -1) {

                value = value.replace("px", "");

            }

        }

        return Math.ceil(value);

    };

    this.position = function (dialog, dialogBody, minusHeight) {

        dialog = dialog || $(".ShowDialogDiv");

        if (dialog[0]) {

            var clientWidth = document.documentElement.clientWidth;

            var clientHeight = document.documentElement.clientHeight;

            var width = _this.formatPercentNumber(dialog.data("position").width, clientWidth) || dialog.width();

            var height = _this.formatPercentNumber(dialog.data("position").height, clientHeight) || dialog.height();

            width = width < 300 ? 300 : width;

            height = height < 450 ? 450 : height;

            $(dialog).css({

                "width": width + "px",

                "height": height + "px",

                "top": Math.ceil((clientHeight - height) / 2) + "px",

                "left": Math.ceil((clientWidth - width) / 2) + "px"

            });

            dialogBody = dialogBody || $(".Dialog_Body");

            if (dialogBody[0]) {

                minusHeight = minusHeight || ($(".Dialog_Head").outerHeight() + $(".Dialog_Foot").outerHeight());

                var dialogBodyHeight = height - minusHeight;

                dialogBody.height(dialogBodyHeight);

            }

        }

    }

}

var createDialogTemplate = function (optionArg, contentHtml, saveBtnClickHandler) {

    var options = {

        "Action": "",

        "Title": "",

        "Width": "50%",

        "Height": "50%"

    };

    if (optionArg) {

        for (var prop in optionArg) {

            options[prop] = optionArg[prop];

        }

    }

    var newDialog = $("<div class='ShowDialogDiv' id='Dialog_" + options.Title + "'>");

    var DialogHead = $("<div class='Dialog_Head'>").appendTo(newDialog);

    $("<span class='HeadLabel'>").html(options.Action + " " + options.Title).appendTo(DialogHead);

    var DialogClose = $("<span class='DialogClose'>").appendTo(DialogHead);

    var DialogBody = $("<div class='Dialog_Body'>").html(contentHtml).appendTo(newDialog);

    var DialogFoot = $("<div class='Dialog_Foot'>").appendTo(newDialog);

    var newDiv = $("<div class='Right'>").appendTo(DialogFoot);

    var ActionCancelDiv = $("<div class='ActionButtonContainer' title='Cancel'>").appendTo(newDiv);

    DialogClose.on("click", function() {

        dialogHelper.remove();

    });

    ActionCancelDiv.on("click", function() {

        dialogHelper.remove();

    });

    var newA = $("<div class='ActionButton' id='ActionButtonCancel'>").appendTo(ActionCancelDiv);

    $("<div class='Icon Cancel'>").appendTo(newA);

    $("<div class='Title IconTitle'>").html("Cancel").appendTo(newA);

    var ActionSaveDiv = $("<div class='ActionButtonContainer' title='Save'>").appendTo(newDiv);

    var newB = $("<div class='ActionButton ActionButtonAttention' id='ActionButtonSave'>").appendTo(ActionSaveDiv);

    newB.on('click', function () {

        if (typeof saveBtnClickHandler == "function") {

            saveBtnClickHandler();

        }

    });

    $("<div class='Icon Save'>").appendTo(newB);

    $("<div class='Title IconTitle SaveButton'>").html("Save").appendTo(newB);

    var minusHeight = DialogHead.outerHeight() + DialogFoot.outerHeight();

    newDialog.data("position", {

        width: options.Width,

        height: options.Height

    });

    dialogHelper.position(newDialog, DialogBody, minusHeight);

    return newDialog;

};

var changeDialogLayout = function(optionArg, dialogObj) {

    var options = {

        "Width": "70%",

        "Height": "90%"

    };

    if (optionArg) {

        for (var prop in optionArg) {

            options[prop] = optionArg[prop];

        }

    }

    var DialogBody = $(dialogObj).find(".Dialog_Body");

    var DialogHead = $(dialogObj).find(".Dialog_Head");

    var DialogFoot = $(dialogObj).find(".Dialog_Foot");

    var other =  Math.round(DialogBody.css("padding-top").replace(/[a-z]/ig, "")) + Math.round(DialogBody.css("padding-bottom").replace(/[a-z]/ig, ""));

    var minusHeight = DialogHead.outerHeight() + DialogFoot.outerHeight() + other;

    dialogObj.data("position", {

        width: options.Width,

        height: options.Height

    });

    dialogHelper.position(dialogObj, DialogBody, minusHeight);

};

以上就是本文所分享的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
为你的网站增加亮点的9款jQuery插件推荐
May 03 Javascript
使用PHP+JQuery+Ajax分页的实现
Apr 23 Javascript
深入分析jquery解析json数据
Dec 09 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
Mar 26 Javascript
Javascript的表单与验证-非空验证
Mar 18 Javascript
js实现动态创建的元素绑定事件
Jul 19 Javascript
JS获取当前页面名称的简单实例
Aug 19 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
微信小程序使用request网络请求操作实例
Dec 15 Javascript
vue动态删除从数据库倒入列表的某一条方法
Sep 29 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
JS中FileReader类实现文件上传及时预览功能
Mar 27 Javascript
jquery中animate的stop()方法作用实例分析
Jan 30 #Javascript
javascript中sort()的用法实例分析
Jan 30 #Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
Jan 30 #Javascript
javascript结合fileReader 实现上传图片
Jan 30 #Javascript
使用JavaScript+canvas实现图片裁剪
Jan 30 #Javascript
js判断手机和pc端选择不同执行事件的方法
Jan 30 #Javascript
项目中常用的JS方法整理
Jan 30 #Javascript
You might like
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Python中文编码那些事
2014/06/25 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
python实现双色球随机选号
2020/01/01 Python
python2 对excel表格操作完整示例
2020/02/23 Python
Python实现动态循环输出文字功能
2020/05/07 Python
python如何设置静态变量
2020/09/07 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
中专毕业自我鉴定
2013/10/16 职场文书
外国语学院毕业生自荐信
2013/10/28 职场文书
班主任寄语大全
2014/04/04 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
转学证明范本
2015/06/19 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
一行Python命令实现批量加水印
2022/04/07 Python