嫌弃浏览器自带弹出框,写个简单的jq自定义弹窗插件

最近作项目写个表单验证,提交信息验证有错误的时候,用了最懒的方法,直接把错误提示用alert()弹出框弹出来,因而老大看完后给了这个表情。。。javascript

确实,自带弹窗样式丑不能自定义这些问题困扰着不少用户,并且在同浏览器有不一样的表现,css

有这样的:。。 有这样的:。。html

还有这样的:。。 还有这样的:前端

相信作前端的都很熟悉这些面孔~ 不统一风格的弹窗直接拉低了整个网站的逼格。。java

好,那就写个简单的JQ插件来装饰一下吧。jquery

JQ插件标准的封装代码以下,首先须要闭包:浏览器

<script type="text/javascript">
(function ($) {
	//这里放入插件代码
})(jQuery);
</script>

这是jQuery官方的插件开发规范,这样写是做用是:
1. 避免全局依赖。
2. 避免第三方破坏。
3. 兼容jQuery操做符’$'和’jQuery’闭包

描述很官方对吧,网上不少资料能够找啦~ 其次是考虑插件开发的策略。app

jQuery插件的开发包括两种:函数

一种是类级别的插件开发,即给jQuery添加新的全局函数,至关于给jQuery类自己添加方法,也就是$.extend()。jQuery的全局函数就是属于jQuery命名空间的函数,另外一种是对象级别的插件开发,即给jQuery对象添加方法,也就是$.fn.extend();

根据需求,这个插件应该是一个全局的函数,只要把要弹出的内容做为参数,就能够实现功能弹出,~因此选择前者

$.diy_alert = function(options) {
})(jQuery);

diy_alert是函数名,options是参数。那么接下来咱们就要考虑有什么参数要写进去的了。

根据需求,我只须要一个框框把文字装起来,好看点就ok,再把这个东西总体居中,文字居中。那么熟悉css的人就知道这里涉及的参数有:

内边距,字体颜色,背景颜色,字体大小等,又须要再增长。还有最重要的参数:提示文字。

因而里面是这样写的:

var dft = {
paddingL: "80px",
paddingR: "80px",
paddingT: "50px",
paddingB: "50px",
fontSize:"32px",
bgColor: "#FFF",
fontColor: "#000",
cont: "成功"
};
var ops = $.extend(dft,options);

(PS:根据@橙子瓣 的评论,这样写比较严谨:var ops = $.extend(dft,options||{});  )

dft是默认参数的集合,在$.extend()方法后,把有的参数传进来,没有的参数设为默认。

参数有了,接下来只须要生产一个div,把样式和内容丢进去,而后丢到body里显示就行了。

至于怎么居中,这里能够用绝对定位的50%定位,再来作边距的减法修正:

var box = $("<div>").css({ "padding-left": ops.paddingL, "padding-right": ops.paddingR, "padding-top": ops.paddingT, "padding-bottom": ops.paddingB, "border": "1px lightgrey solid","position":"fixed","left":"50%","top":"50%","background-color":"#fff","color":"#000","font-size":ops.fontSize,"z-index":101 }).html(ops.cont).appendTo($("body"));
box.css({"margin-left":-(box.outerWidth(true)/2),"margin-top":-box.outerHeight(true)/2});

可能有些人会对outerWidth(true)有点陌生。这个方法是获取包括padding,margin,和border在内的真实宽度。

弹窗生成出来了,最后在适当时候去掉就OK,懒人模式:

setTimeout(function(){
box.remove();
},2000);

有时间的同窗本身写个关闭按钮上去。完整代码:

(function ($) {
        $.diy_alert = function(options) {
            var dft = {
                paddingL: "80px", 
                paddingR: "80px", 
                paddingT: "50px", 
                paddingB: "50px",
                fontSize:"32px",
                bgColor:    "#FFF",
                fontColor:    "#000",
                cont:    "成功"
            };
            var ops = $.extend(dft,options||{});
            var box = $("<div>").css({ "padding-left": ops.paddingL, "padding-right": ops.paddingR, "padding-top": ops.paddingT, "padding-bottom": ops.paddingB, "border": "1px #000 solid","position":"fixed","left":"50%","top":"50%","background-color":ops.bgColor,"color":ops.fontColor,"font-size":ops.fontSize,"z-index":101 }).html(ops.cont).appendTo($("body"));
            box.css({"margin-left":-(box.outerWidth(true)/2),"margin-top":-box.outerHeight(true)/2});
            setTimeout(function(){
                box.remove();
            },2000); 
        }
    })(jQuery);

记得在这以前引入jquery.js文件。最后就是使用了,超简单啦,只要给个参数就能够弹出来了:

$.diy_alert({"cont":"手机号格式不正确"});

最后弹出来是这个样子的:

两秒后自动消失,好看多了有木有- - 最起码在任何浏览器上都统同样式了,要漂亮的本身加参数调整~

就这样吧,写得很差勿喷,有问题请大侠指出,收工。

相关文章
相关标签/搜索