最近作项目写个表单验证,提交信息验证有错误的时候,用了最懒的方法,直接把错误提示用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":"手机号格式不正确"});
最后弹出来是这个样子的:
两秒后自动消失,好看多了有木有- - 最起码在任何浏览器上都统同样式了,要漂亮的本身加参数调整~
就这样吧,写得很差勿喷,有问题请大侠指出,收工。