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 相关文章推荐
Prototype Object对象 学习
Jul 12 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
Aug 20 Javascript
javascript面向对象之访问对象属性的两种方式分析
Jan 13 Javascript
js实现图片淡入淡出切换简易效果
Aug 22 Javascript
第一次动手实现bootstrap table分页效果
Sep 22 Javascript
bootstrap table复杂操作代码
Nov 01 Javascript
js实现不提示直接关闭网页窗口
Mar 30 Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 Javascript
集合Bootstrap自定义confirm提示效果
Sep 19 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
JS+H5 Canvas实现时钟效果
Jul 20 Javascript
利用JS响应式修改vue实现页面的input值
Sep 02 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多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
js left,right,mid函数
2008/06/10 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
vue-router 权限控制的示例代码
2017/09/21 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
python实现转圈打印矩阵
2019/03/02 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python @classmethod 的使用场合详解
2019/08/23 Python
Python简单实现区域生长方式
2020/01/16 Python
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
GWebs公司笔试题
2012/05/04 面试题
质检员的岗位职责
2013/11/15 职场文书
租赁协议书
2015/01/27 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
python双向链表实例详解
2022/05/25 Python