jquery封装了一个简洁轻巧的可拖动可自定义样式的纯div+css带遮罩层的仿模态弹出框

最近封装上瘾,想起以前做的一个轻巧的弹出框,是样式和脚本分离的,于是重新封装了一下,把样式标签统一到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, obj, popDialogConfig) {
    content = content || "这里什么都没有!";
    title = title || "提示";
    obj = obj || $(document.body);
    var dialog = new Object;
    /*
     * 弹出框的默认样式
     */
    var config = PopDialogDefaultConfig.Merge(popDialogConfig);
    /*
     * 根据配置文件和弹出对象,取得弹出框的html串;
     */
    if (!obj.id) {
        obj.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 = '<div id="' + obj.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="' + obj.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="' + obj.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="' + obj.id + '_Title" style="display:inline-block;font-size:' + config.titleFontSize + 'px;padding-left:10px;color:' + config.titleColor + ';">' + (title || "提示") + '</span>'
        + '        <a style="display:block;float:right;text-decoration: none;margin-right:20px;clear:right;color:white;font-size:' + config.titleHeight * 8 / 10 + 'px;" href="#" onclick="$(\'#' + obj.id + '_Dialog\').remove();$(\'#' + obj.id + '_Cover\').remove();">X</a>'
        + '    </div>'
        + '    <div id="' + obj.id + '_Body" style="background-color:' + config.backColor + ';width:' + config.contentWidth + 'px;height:' + config.contentHeight + 'px;border:' + config.borderWidth + 'px solid ' + config.borderColor + ';">'
        + '        <div id="' + obj.id + '_Content" style="background-color:' + config.backColor + ';">' + content + '</div>'
        + '    </div>'
        + '</div>';
    dialog.Config = config;
    dialog.PopDom = $(dialog.Html);
    dialog.x = dialog.x1 = dialog.y = dialog.y1 = dialog.mousekey = 0;
    /*
     * 鼠标拖动弹出框
     */
    if (config.moveAble) {
        var top = dialog.PopDom.find("#" + obj.id + "_Top");
        top.on("mousedown", function (event) {
            dialog.mousekey = 1;
            $(this).css("cursor", "move");
            dialog.PopDom.find("#" + obj.id + "_Content").css("display", "none");
        });
        top.on("mouseup", function (event) {
            dialog.mousekey = 0; $(this).css("cursor", "default");
            dialog.PopDom.find("#" + obj.id + "_Content").css("display", "");
        });
        top.on("mouseout", function (event) {
            dialog.mousekey = 0; $(this).css("cursor", "default");
            dialog.PopDom.find("#" + obj.id + "_Content").css("display", "");
        });
        top.on("mousemove", function (event) {
            if (dialog.mousekey == 1) {
                if (dialog.x != 0 || dialog.y != 0) {
                    dialog.x = event.pageX - dialog.x1;
                    dialog.y = event.pageY - dialog.y1;
                    var parent = $(this.parentElement);
                    parent.css("left", (parent.position().left + dialog.x) + "px");
                    parent.css("top", (parent.position().top + dialog.y) + "px");
                    dialog.x = dialog.x1 = event.pageX;
                    dialog.y = dialog.y1 = event.pageY;
                } else {
                    dialog.x = dialog.x1 = event.pageX;
                    dialog.y = dialog.y1 = event.pageY;
                }
            } else {
                dialog.x = dialog.x1 = dialog.y = dialog.y1 = 0;
            }
            return false;
        });
    }
    return dialog;
};

/*
 * 拓展jquery对象的方法;
 */
(function ($) {
    /*
     * 关闭弹出框的方法
     */
    $.fn.ClosePopDialog = function () {
        var obj = this;
        while (obj) {
            var popdialog = $("#" + this.id + "_Dialog");
            if (popdialog) {
                popdialog.remove();
            }
            var popcover = $("#" + this.id + "_Cover");
            if (popcover) {
                popcover.remove();
            }
            obj = obj.parent;
        }
    };
    /*
     * 根据url取得内容并弹出框显示的方法
     * url: 需要显示的内容的url
     * popDialogConfig: 自定义样式
     * Example: $(document.body).PopDialog("/home/login", { backColor: "gray", borderColor: "blue", borderWidth: 2, contentWidth: 600, contentHeight: 480 });
     */
    $.fn.PopDialogByUrl = function (url, title, popDialogConfig) {
        var obj = $(this);
        obj.ClosePopDialog();
        if (url) {
            $.ajax({
                url: url,
                cache: false,
                success: function (result) {
                    if (result == "[]" || result == "") {
                        result = "系统忙,请稍后再试!";
                    }
                    var pop = new PopDialog(result, title, this, popDialogConfig);
                    obj.append(pop.PopDom);
                },
                error: function (result) {
                    if (result == "[]" || result == "") {
                        result = "系统错误,请联系管理员!";
                    }
                    var pop = new PopDialog(result, title, this, popDialogConfig);
                    obj.append(pop.PopDom);
                }
            });
        }
    };
    /*
     * 弹出框显示提供的内容的方法
     * content: 需要显示的内容
     * popDialogConfig: 自定义样式
     * Example: $(document.body).PopDialog("<div>这是一个弹出框的例子!</div>", { backColor: "gray", borderColor: "blue", borderWidth: 2, contentWidth: 600, contentHeight: 480 });
     */
    $.fn.PopDialogByContent = function (content, title, popDialogConfig) {
        var obj = $(this);
        obj.ClosePopDialog();
        var pop = new PopDialog(content, title, this, popDialogConfig);
        obj.append(pop.PopDom);
    };
})(jQuery);

时间: 2024-10-18 02:02:03

jquery封装了一个简洁轻巧的可拖动可自定义样式的纯div+css带遮罩层的仿模态弹出框的相关文章

做一个vue模态弹出框如何

运用的知识点包括: 路由的配置 插槽 vue的过渡动画 路由重定向 router/index.js里面配置路由 import Vue from 'vue' import Router from 'vue-router' import Home from '@/components/home' import About from '@/components/about' Vue.use(Router) export default new Router({ mode:'history', rout

四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现

虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们的需求,下面我简单介绍一些 常见的四种提示弹出框(success,loading,error,warning),我分别用原生JavaScript和jQuery来介绍分享给各位博友! 一.首先介绍原生JavaScript来实现四种提示弹出框: 第一步:先看看html的建立 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:

[RN] React Native 封装选择弹出框(ios&amp;android)

之前看到react-native-image-picker中自带了一个选择器,可以选择拍照还是图库,但我们的项目中有多处用到这个选择弹出框,所以就自己写了一下,最最重要的是ios和Android通用.先上动态效果图~ 参考: https://www.jianshu.com/p/42b4390e860e https://www.jianshu.com/p/71c4d047b2f8 原文地址:https://www.cnblogs.com/wukong1688/p/10960917.html

面遮罩弹出框已经不是一个陌生的话题了,实现的方法大同小异多种多样,今天用jQuery实现页面遮罩弹出

页面遮罩弹出框是最常见的一种情况,今天用jQuery实现页面遮罩弹出框,主要用的技术有JQuery,css和html, html代码如下: 复制代码代码如下: <div id="main"><a href="javascript:showBg();">点击这里查看效果</a> <div id="fullbg"></div> <div id="dialog">

jquery实现一个简单的弹出框

自己改写一些jquery的部分代码,自己总结出来一个比较好用的jquery弹出框,留着以后工作时候再用.喜欢就拿走吧! 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999

自己封装的一个纯div+css样式弹出泡泡消息框

也许很多框架都自带了这样的弹出泡泡框,但我没接触过,现在需要用,于是便自己封装了一个,虽然还不完美,但已经可以用了.这个小控件可以重定义样式,通过传递配置参数,或修改默认配置参数都可以进行样式调整.不管怎么说,就当是练手,或给新人提供一个参考学习的机会也行吧 /* * js 对象合并 */ function extend(newObj, defaultObj) { var result = {}; for (var p in defaultObj) { result[p] = defaultOb

【如何使用jQuery】【jQuery弹出框】【jQuery对div进行操作】

1.如何使用jQuery jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多的事情.它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动画设计和Ajax交互. 使用jQuery前必须下载并引用jQuery的js文件,下载链接为h

弹出框layer的使用封装

layer弹出框官方网址:http://layer.layui.com/ layer常用方法的封装:layerTool.jsp layer.config({ extend: 'extend/layer.ext.js', //注意,目录是相对layer.js根目录.如果加载多个,则 [a.js, b.js, …] shift: 0//默认动画风格 }); function Layer(){} ; Layer.prototype = { toplayer : window.top.layer , /

Android 学习笔记之AndBase框架学习(二) 使用封装好的进度框,Toast框,弹出框,确认框...

PS:渐渐明白,在实验室呆三年都不如在企业呆一年... 学习内容: 1.使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框...   AndBase中AbActivity封装好了许多方法提供我们去使用,使得在使用的时候更加的方便,只需要传递相关参数即可..省去了我们自己使用基础的函数进行构造...   就好比进度框,Toast框,弹出框,确认框...这些基本的东西都在AndBase的AbActivity封装好了...我们只需要传递参数调用其中内部的方法就可以完成这些视