个性化自定义弹出窗口,可随意拖动,兼容性已测试

这个弹出窗口的方法是很久之前就已经完成的,也已经在项目中投入使用了,后来经历过几次大修大改,终于敢拿出来和大家分享一下。只不过事先需要说明的是,这个是从我的个人框架中摘出来的,所以有些现在看起来封装的不是太好,各位就将就着看下吧

首先要介绍一个方法,这个方法是从prototype.js中摘录的方法,同时也是prototype.js最底层的核心代码

Object.extend = function (destination, source, source1) {
    for (var property in source) {
        destination[property] = source[property];
    }
    if (typeof source1 != undefined) {
        for (var property1 in source1) {
            destination[property1] = source1[property1];
        }
    }
    return destination;
}

有了这个方法,你可以方便的进行任何扩展,如下面这段代码

var setting={
   name:"aaaaa",
   age:"20",
   addr:""
}
var a=Object.extend({},setting,{qq:"111111"})
alert(a.name+"|"+a.qq)
怎么样?很神奇吧?好了,废话不多说了,咱们进入正题吧。先给大家看看这些参数,注释里都写的很明白了

var dialogSetting = {
    title: null, //弹出窗口要显示的标题
    cont: null, //弹出窗口显示的内容,注意如果配置了ContUrl,那么此配置将不会生效
    ContUrl: undefined, //弹出窗口要加载的页面地址,这里需要ajax,请确认System下面有ajax的方法
    path: "/images/dialog/", //弹出窗口所需的图片存放目录,相对于根目录
    okTit: "确定", //确定按钮要显示的文字
    width: 0, //弹出窗口的宽度,如果不配置此项,那么在IE下宽度将会被强制设定为IEwidth所设定的值
    IEwidth: 350, //此设置只针对IE下无法实现宽度自适应,如果上面已经配置了width不等于0,那么此设置将不会生效
    height: 0, //弹出窗口的高度,无需设置
    image_zindex: 1000, //遮罩层的z-index
    cont_zindex: 2000, //弹出窗口的z-index,请确保此值大于遮罩层的z-index
    scroll: true, //弹出窗口后是否允许页面滚动
    num: 0, //当弹出窗口的数量超过1个的时候需要配置此项,此值表示在创建新的弹出窗口之前页面上已经存在的弹出窗口数量,多个弹出窗口的时候此值至关重要!
    mall: 100, //当前弹出窗口相对于上一个弹出窗口的顶部偏移量,防止2个弹出窗口的标题栏出现重合现象,此设置仅在num不等于0的情况下生效
    _focus: null, //可选值为“ok”和“cancle”。规定鼠标的焦点默认位于哪一个按钮上。此设置仅在type设置为confirm的情况下才会生效
    type: "alert", //可选值为“alert”和“confirm”和“loading”。alert只显示确定按钮,confirm显示确定和取消按钮,并且鼠标的焦点默认位于取消按钮上,loading只显示取消按钮
    remove: function () { },
    ok: function () {
        this.remove();
    },
    cancle: function () {
        this.remove();
    }
};

这个就是弹出窗口中所需要的所有参数,当然有些不能被外界修改的参数我都已经放至函数内部了,大致说明一下这些参数的含义吧!


首先是titlecont这2个参数,这2个是最常用的,用来改变弹出窗口的标题和内容的,如下面这段代码

 System.Dialog({ title: "只显示确定按钮", cont: "这个时候只显示确定按钮" });

默认的话,是只显示确定按钮的,如果要进行更改,就必须指定type参数了。比如你想只显示取消按钮,可以指定 type为loading即可,代码如下

System.Dialog({ title: "只显示取消按钮", cont: "这个时候只显示取消按钮", type: "loading" });

同理,如果要同时显示确定和取消按钮,可以指定type为confirm即可

 System.Dialog({ title: "显示2个按钮", cont: "这个时候会显示确定和取消按钮", type: "confirm" });

这个时候你就发现默认选中的总是取消按钮,如果要让确定按钮处于选中状态,就要使用_focus参数了,将_focus指定为“ok”即可

System.Dialog({ title: "显示2个按钮", cont: "可以设定_focus参数来指定按钮的选中状态", type: "confirm", _focus: "ok" });

接着是 ContUrl这个参数,这个参数的意思是指定弹出窗口要加载的页面地址,为了避免可能出现难以预料的错误,请尽量使用相对于根目录的地址。这个跟cont是互斥的,而且 ContUrl的优先级要高于cont的,如果指定了ContUrl,那么对cont的任何设置都不会生效

System.Dialog({ title: "只显示确定按钮", ContUrl: "/admin/login.html" });

弹出窗口的宽度和高度一般都不需要设置,因为都是自适应的,只有在IE的某些版本中才会出现宽度无法自适应的情况,这个时候就需要用到 IEwidth这个参数了
System.Dialog({ title: "只显示确定按钮", ContUrl: "/admin/login.html",IEwidth:500 });

需要说明的是这个参数只有在width设置为0的时候才会生效,所以使用之前请注意这个地方。还有,这个加载页面的方法是通过ajax的方法加载的,用的都是innerHTML哦,所以如果要加载的内容里面含有script标签的话,是没有作用的,当然,如果你需要修改加载方式的话,就在代码里面搜索System.Ajax吧!

scroll参数,顾名思义,这个参数就是控制页面滚动的,在某些情况下,弹出窗口后需要禁止页面滚动,而在有些情况下需要保持页面滚动,你可以动态设置scroll的值为true或者false来控制页面的滚动,这个滚动兼容各大浏览器哦!

nummall参数,这2个参数是后来加上去的,主要是因为在使用的过程中发现如果弹出2个窗口的话,窗口的标题栏和左则都重叠到一起了,所以才设置这2个参数来动态设置窗口的偏移量,偏移量都是相对于上一个弹出窗口的。num参数默认为0,表示只有1个弹出窗口,不需要进行任何位置偏移。每增加1个弹出窗口请将num值加1。而mall值则是为了控制偏移的大小的,这个就不需要多做说明了。

okcancle这2个参数主要是指定确定按钮和取消按钮要绑定的回调函数,以此来模拟conform的阻塞效果。具体代码如下

 
System.Dialog({ title: "显示2个按钮", type: "confirm", cont: "这个时候会显示确定和取消按钮,并可以为按钮分别绑定回调函数", ok: function () {
                        alert(" 你点击了确定按钮");
                        this.remove();
                }, cancle: function () {
                           alert(" 你点击了取消按钮");
                           this.remove();
               }
             });

好了,参数基本上已经介绍完毕了,下面给大家说明一下如何让多个弹出窗口共存或者同时关闭。默认情况下,在ok或者cancle事件中调用this.remove()事件即可关闭弹出窗口,但多个弹出窗口的时候,这个方法是没办法关闭上一个弹出窗口的,因为this的指向已经发生了改变,所以需要另辟蹊径,具体代码如下

System.Dialog({ title: "多个窗口共存", type: "confirm", cont: "多个窗口共存,并可同时关闭", ok: function () {
        var me = this;
        System.Dialog({ title: "执行结果", cont: "你点击了确定按钮", num: 1, ok: function () {
            this.remove();
           me.remove();
        }
        });

}, cancle: function () {
           var me = this;
           System.Dialog({ title: "执行结果", cont: "你点击了取消按钮", num: 1, ok: function () {
            this.remove();
            me.remove();
           }
           });
        }
    });

最后给大家上一个效果图吧,2个弹出窗口的

下载地址稍候奉上


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值