jquery扩展弹框插件

使用jquery的extend扩展弹框插件

jquery的extend用一个或多个其他对象来扩展一个对象,返回被扩展的对象。

如果不指定target,则给jQuery命名空间本身进行扩展。这有助于插件作者为jQuery增加新方法。 如果第一个参数设置为true,则jQuery返回一个深层次的副本,递归地复制找到的任何对象。否则的话,副本会与原对象共享结构。 未定义的属性将不会被复制,然而从对象的原型继承的属性将会被复制。

github地址 :https://github.com/Aimee1608/windowOpen

页面结构和样式

var _html ='<div class="window-masking"></div>'+
        '<div class="window-container fix" id="addNew">'+
            '<h2></h2>'+
            '<div class="window-content">'+
                '<p class="window-text"></p>'+
            '</div>'+
            '<div class="window-btn fix">'+
                '<a class="cancel-button fl" href="javascript:;"></a>'+
                '<a class="confirm-button fr" href="javascript:;"></a>'+
                '<a class="ack-button fr" href="javascript:;"></a>'+
            '</div>'+
        '</div>';
var style = ".fix {zoom: 1;}"+
                ".fix:after{ content: ''; height: 0; width: 0; clear: both; display:block; overflow: hidden;}"+
                ".fl{float:left;}"+
                ".fr{float: right;}"+
                ".window-masking{width: 100%;height: 100%;background: #000;opacity: .5;position: fixed;top:0;left:0;bottom:0;right:0;z-index: 99;display: none;}"+
                ".success,.window-container{width: 78%;background: #fff;position: fixed;top: 30%;left: 50%;margin-left:-39%;z-index: 100;border-radius: 4px;overflow: hidden;display: none;}"+
                ".success .window-content,.window-container .window-content{padding: 20px 5%;border-bottom: 1px solid #bdbdbd;}"+
                ".success p,.window-container .window-content p{margin:0;padding:0;font-size: 14px;color:#676767;line-height: 24px;text-align: center;}"+
                ".window-btn a{text-decoration:none;display: block;height: 40px;width: 49%;text-align: center;line-height: 40px;font-size: 16px;font-weight: bold;color:#363636;display: none;}"+
                ".window-btn a.cancel-button{border-right: 1px solid #bdbdbd;}"+
                ".window-btn a.confirm-button{color:#d6a41f;}"+
                ".window-container h2{margin:0;padding:0;text-align: center;font-size: 16px;font-weight: bold;color:#363636;padding-top: 22px;display: none;}"+
                ".window-btn .ack-button{display: none;height: 40px;width: 100%;text-align: center;line-height: 40px;font-size: 16px;font-weight: bold;color:#d6a41f;;}"+
                ".window-btn .ack-button:active{background: #d6a41f;color:#fff;}"+
                "@media only screen and (min-width: 568px) and (max-width: 1990px) {"+
                ".success,.window-container{width:100%;left: 50%;margin-left:-250px;max-width: 500px;top:20%;}"+
                "}";
  • 呈现的效果(alert按钮的效果)
    image.png

关闭弹窗方法

var $oMasking;
var $oWindowContainer;
var $first = true;
function closeWindow(){
        $oMasking = $('.window-masking');
        $oWindowContainer = $('.window-container');
        //关闭弹窗的时候将蒙版和html从页面中移除掉
        $oMasking.remove();
        $oWindowContainer.remove();
        return '确定';
    }

初始化

var Modal = function () {
        this.thismodal = $('#addNew');
    };

修改内容方法

Modal.prototype = {
        setContents:function(obj){
            //找到需要修改内容的标签p,获取调用中设置的提示语
            this.thismodal.find('p.window-text').html(obj);
        },
        setTitle:function(obj){
            //找到需要修改的弹窗标题,获取调用中设置的弹窗标题
            if(obj!=""){
                this.thismodal.find('h2').show().html(obj);
            }

        },
        setButton: function (obj){
            //console.log('传过来的参数',obj);
            //解析传过来的参数json
            var json=eval(obj);
                 //console.log(json);

            if(json.length==1){
                //一个按钮
                this.thismodal.find('a.ack-button').show().html(json[0]);
            }
            if(json.length==2){
                //两个按钮
                this.thismodal.find('a.cancel-button').show().html(json[0]);//取消
                this.thismodal.find('a.confirm-button').show().html(json[1]);//确认
            }
        }
    }

打开弹窗方法

    $.extend({openWindow:function(setTitle,setContents,setButton,callback){

        //拼接弹窗内容,并且在调用打开弹窗方法时将内容塞进body
        var _html ='<div class="window-masking"></div>'+
        '<div class="window-container fix" id="addNew">'+
            '<h2></h2>'+
            '<div class="window-content">'+
                '<p class="window-text"></p>'+
            '</div>'+
            '<div class="window-btn fix">'+
                '<a class="cancel-button fl" href="javascript:;"></a>'+
                '<a class="confirm-button fr" href="javascript:;"></a>'+
                '<a class="ack-button fr" href="javascript:;"></a>'+
            '</div>'+
        '</div>';

        if($first){
            $first = false;
            var style = ".fix {zoom: 1;}"+
                ".fix:after{ content: ''; height: 0; width: 0; clear: both; display:block; overflow: hidden;}"+
                ".fl{float:left;}"+
                ".fr{float: right;}"+
                ".window-masking{width: 100%;height: 100%;background: #000;opacity: .5;position: fixed;top:0;left:0;bottom:0;right:0;z-index: 99;display: none;}"+
                ".success,.window-container{width: 78%;background: #fff;position: fixed;top: 30%;left: 50%;margin-left:-39%;z-index: 100;border-radius: 4px;overflow: hidden;display: none;}"+
                ".success .window-content,.window-container .window-content{padding: 20px 5%;border-bottom: 1px solid #bdbdbd;}"+
                ".success p,.window-container .window-content p{margin:0;padding:0;font-size: 14px;color:#676767;line-height: 24px;text-align: center;}"+
                ".window-btn a{text-decoration:none;display: block;height: 40px;width: 49%;text-align: center;line-height: 40px;font-size: 16px;font-weight: bold;color:#363636;display: none;}"+
                ".window-btn a.cancel-button{border-right: 1px solid #bdbdbd;}"+
                ".window-btn a.confirm-button{color:#d6a41f;}"+
                ".window-container h2{margin:0;padding:0;text-align: center;font-size: 16px;font-weight: bold;color:#363636;padding-top: 22px;display: none;}"+
                ".window-btn .ack-button{display: none;height: 40px;width: 100%;text-align: center;line-height: 40px;font-size: 16px;font-weight: bold;color:#d6a41f;;}"+
                ".window-btn .ack-button:active{background: #d6a41f;color:#fff;}"+
                "@media only screen and (min-width: 568px) and (max-width: 1990px) {"+
                ".success,.window-container{width:100%;left: 50%;margin-left:-250px;max-width: 500px;top:20%;}"+
                "}";
            $("<style></style>").text(style).appendTo($("head"));
        }

        //将拼接好的html塞进body里面
        $('body').append(_html);
        $oMasking = $('.window-masking');
        $oWindowContainer = $('.window-container');
        //点击取消按钮关闭弹窗
        $('.cancel-button,.window-masking,.ack-button,.confirm-button').on('click',function(e){
             closeWindow();
            //console.log('点击确认框,回调',this);
            if(callback){
                if(callback){
                    callback($(this).html());
                }
            }
        });
        //设置蒙版展示
        var modal = new Modal();
        // console.log(setButton+","+setContents+","+setButton)
        modal.setTitle(setTitle);
        modal.setContents(setContents);
                //设置按钮个数和链接
        modal.setButton(setButton);
        $oMasking.show();
        //设置弹窗面板展示
        $oWindowContainer.show();
    }});

完成代码

(function(){
    // JavaScript Document
    //弹窗公共部分js,所有弹窗已经写好,调用时按照页面中注释方法使用即可
    var $oMasking;
    var $oWindowContainer;
    var $first = true;
    //打开弹窗方法
    $.extend({openWindow:function(setTitle,setContents,setButton,callback){

        //拼接弹窗内容,并且在调用打开弹窗方法时将内容塞进body
        var _html ='<div class="window-masking"></div>'+
        '<div class="window-container fix" id="addNew">'+
            '<h2></h2>'+
            '<div class="window-content">'+
                '<p class="window-text"></p>'+
            '</div>'+
            '<div class="window-btn fix">'+
                '<a class="cancel-button fl" href="javascript:;"></a>'+
                '<a class="confirm-button fr" href="javascript:;"></a>'+
                '<a class="ack-button fr" href="javascript:;"></a>'+
            '</div>'+
        '</div>';

        if($first){
            $first = false;
            var style = ".fix {zoom: 1;}"+
                ".fix:after{ content: ''; height: 0; width: 0; clear: both; display:block; overflow: hidden;}"+
                ".fl{float:left;}"+
                ".fr{float: right;}"+
                ".window-masking{width: 100%;height: 100%;background: #000;opacity: .5;position: fixed;top:0;left:0;bottom:0;right:0;z-index: 99;display: none;}"+
                ".success,.window-container{width: 78%;background: #fff;position: fixed;top: 30%;left: 50%;margin-left:-39%;z-index: 100;border-radius: 4px;overflow: hidden;display: none;}"+
                ".success .window-content,.window-container .window-content{padding: 20px 5%;border-bottom: 1px solid #bdbdbd;}"+
                ".success p,.window-container .window-content p{margin:0;padding:0;font-size: 14px;color:#676767;line-height: 24px;text-align: center;}"+
                ".window-btn a{text-decoration:none;display: block;height: 40px;width: 49%;text-align: center;line-height: 40px;font-size: 16px;font-weight: bold;color:#363636;display: none;}"+
                ".window-btn a.cancel-button{border-right: 1px solid #bdbdbd;}"+
                ".window-btn a.confirm-button{color:#d6a41f;}"+
                ".window-container h2{margin:0;padding:0;text-align: center;font-size: 16px;font-weight: bold;color:#363636;padding-top: 22px;display: none;}"+
                ".window-btn .ack-button{display: none;height: 40px;width: 100%;text-align: center;line-height: 40px;font-size: 16px;font-weight: bold;color:#d6a41f;;}"+
                ".window-btn .ack-button:active{background: #d6a41f;color:#fff;}"+
                "@media only screen and (min-width: 568px) and (max-width: 1990px) {"+
                ".success,.window-container{width:100%;left: 50%;margin-left:-250px;max-width: 500px;top:20%;}"+
                "}";
            $("<style></style>").text(style).appendTo($("head"));
        }

        //将拼接好的html塞进body里面
        $('body').append(_html);
        $oMasking = $('.window-masking');
        $oWindowContainer = $('.window-container');
        //点击取消按钮关闭弹窗
        $('.cancel-button,.window-masking,.ack-button,.confirm-button').on('click',function(e){
             closeWindow();
            //console.log('点击确认框,回调',this);
            if(callback){
                callback($(this).html());
            }
        });
        //设置蒙版展示
        var modal = new Modal();
        // console.log(setButton+","+setContents+","+setButton)
        modal.setTitle(setTitle);
        modal.setContents(setContents);
                //设置按钮个数和链接
        modal.setButton(setButton);
        $oMasking.show();
        //设置弹窗面板展示
        $oWindowContainer.show();
    }});
    //关闭弹窗方法
    function closeWindow(){
        $oMasking = $('.window-masking');
        $oWindowContainer = $('.window-container');
        //关闭弹窗的时候将蒙版和html从页面中移除掉
        $oMasking.remove();
        $oWindowContainer.remove();
        return '确定';
    }
    //初始化
    var Modal = function () {
        this.thismodal = $('#addNew');
    };
    //修改内容方法
    Modal.prototype = {
        setContents:function(obj){
            //找到需要修改内容的标签p,获取调用中设置的提示语
            this.thismodal.find('p.window-text').html(obj);
        },
        setTitle:function(obj){
            //找到需要修改的弹窗标题,获取调用中设置的弹窗标题
            if(obj!=""){
                this.thismodal.find('h2').show().html(obj);
            }

        },
        setButton: function (obj){
            //console.log('传过来的参数',obj);
            //解析传过来的参数json
            var json=eval(obj);
                 //console.log(json);

            if(json.length==1){
                //一个按钮
                this.thismodal.find('a.ack-button').show().html(json[0]);
            }
            if(json.length==2){
                //两个按钮
                this.thismodal.find('a.cancel-button').show().html(json[0]);
                this.thismodal.find('a.confirm-button').show().html(json[1]);
            }
        }
    }

})();

弹框使用

  • 如下两个按钮
<button class="alert">alert</button>

<button class="config">config</button>
  • 引入js
<script src="js/jquery-1.8.3.min.js"></script>
<script src="js/windowOpen.js"></script>
  • alert弹框和config确认提示触发事件
    $('.alert').on('click',function(){
        $.openWindow("提示","请阅读并同意政策条款",['确定']);
    });
    $('.config').on('click',function(){
        
        $.openWindow("提示","请阅读并同意政策条款",['取消','确定'],function(msg){
        //成功回调函数
           //返回传入的内容
            $('h1').html(msg);
        });
    });
  • 展示(config弹框)
image.png
image.png
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,335评论 0 2
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,174评论 0 1
  • 不管你是前端程序员,还是后端程序员,无人不知JQuery,无人不晓JQuery。她的好处想必大家都知道,很多人喜欢...
    滇藏1987阅读 1,217评论 0 9
  • 第1章 jQuery实现Ajax应用 1-1 使用load()方法异步请求数据 使用load()方法通过Ajax请...
    mo默22阅读 1,699评论 1 9
  • 19岁的最后一天,很寻常,也有点不同寻常。 18.5岁之前,一直不知道自己要什么,喜欢什么,向往什么样的生活。很庆...
    香蕉粒阅读 1,161评论 2 3