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 相关文章推荐
jQuery为iframe的body添加click事件的实现代码
Apr 07 Javascript
JS中的log对象获取以及debug的写法介绍
Mar 03 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
基于React.js实现原生js拖拽效果引发的思考
Mar 30 Javascript
jQuery 改变P标签文本值方法
Feb 24 jQuery
记一次vue去除#问题处理经过小结
Jan 24 Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 Javascript
Vue.js组件通信之自定义事件详解
Oct 19 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
Nov 26 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 Javascript
javascript将16进制的字符串转换为10进制整数hex
Mar 05 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 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
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
node.js中watch机制详解
2014/11/17 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python中用Spark模块的使用教程
2015/04/13 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
python利用微信公众号实现报警功能
2018/06/10 Python
有关Python的22个编程技巧
2018/08/29 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
幼儿园园长岗位职责
2013/11/26 职场文书
给男朋友的道歉信
2014/01/12 职场文书
领导班子四风表现材料
2014/08/23 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
心灵捕手观后感
2015/06/02 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL