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 相关文章推荐
Javascript中克隆一个数组的实现代码
Dec 06 Javascript
js与运算符和或运算符的妙用
Feb 14 Javascript
javascript中interval与setTimeOut的区别示例介绍
Mar 14 Javascript
jQuery不兼容input的change事件问题解决过程
Dec 05 Javascript
简述Jquery与DOM对象
Jul 10 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
Aug 24 Javascript
WebView启动支付宝客户端支付失败的问题小结
Jan 11 Javascript
JavaScript利用fetch实现异步请求的方法实例
Jul 26 Javascript
Vue+Vux项目实践完整代码
Nov 30 Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 Javascript
vue表单数据交互提交演示教程
Nov 13 Javascript
ant-design-vue按需加载的坑的解决
May 14 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生成短网址示例
2014/05/05 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
php判断访问IP的方法
2015/06/19 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
JsRender for object语法简介
2014/10/31 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
python读文件逐行处理的示例代码分享
2013/12/27 Python
深入解析Python中的集合类型操作符
2015/08/19 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
Python转换时间的图文方法
2019/07/01 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
什么是TCP/IP
2014/07/27 面试题
毕业晚会主持词
2014/03/24 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
学校中秋节活动总结
2015/03/23 职场文书
《观察物体》教学反思
2016/02/17 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
golang elasticsearch Client的使用详解
2021/05/05 Golang