jQuery插件实现模拟alert和confirm
程序员文章站
2022-05-23 16:30:22
啥也不说,先上图,有图有真相 :)
现在绝大多数网站都不用自带的alert和confirm了,因为界面太生硬了。因此这个插件就这样产生了...
来看插件的实现代码吧:...
啥也不说,先上图,有图有真相 :)
现在绝大多数网站都不用自带的alert和confirm了,因为界面太生硬了。因此这个插件就这样产生了...
来看插件的实现代码吧:
(function () { $.msgbox = { alert: function (title, msg) { generatehtml("alert", title, msg); btnok(); //alert只是弹出消息,因此没必要用到回调函数callback btnno(); }, confirm: function (title, msg, callback) { generatehtml("confirm", title, msg); btnok(callback); btnno(); } } //生成html var generatehtml = function (type, title, msg) { var _html = ""; _html += '<p id="mb_box"></p><p id="mb_con"><span id="mb_tit">' + title + '</span>'; _html += '<a id="mb_ico">x</a><p id="mb_msg">' + msg + '</p><p id="mb_btnbox">'; if (type == "alert") { _html += '<input id="mb_btn_ok" type="button" value="确定" />'; } if (type == "confirm") { _html += '<input id="mb_btn_ok" type="button" value="确定" />'; _html += '<input id="mb_btn_no" type="button" value="取消" />'; } _html += '</p></p>'; //必须先将_html添加到body,再设置css样式 $("body").append(_html); generatecss(); } //生成css var generatecss = function () { $("#mb_box").css({ width: '100%', height: '100%', zindex: '99999', position: 'fixed', filter: 'alpha(opacity=60)', backgroundcolor: 'black', top: '0', left: '0', opacity: '0.6' }); $("#mb_con").css({ zindex: '999999', width: '400px', position: 'fixed', backgroundcolor: 'white', borderradius: '15px' }); $("#mb_tit").css({ display: 'block', fontsize: '14px', color: '#444', padding: '10px 15px', backgroundcolor: '#ddd', borderradius: '15px 15px 0 0', borderbottom: '3px solid #009bfe', fontweight: 'bold' }); $("#mb_msg").css({ padding: '20px', lineheight: '20px', borderbottom: '1px dashed #ddd', fontsize: '13px' }); $("#mb_ico").css({ display: 'block', position: 'absolute', right: '10px', top: '9px', border: '1px solid gray', width: '18px', height: '18px', textalign: 'center', lineheight: '16px', cursor: 'pointer', borderradius: '12px', fontfamily: '微软雅黑' }); $("#mb_btnbox").css({ margin: '15px 0 10px 0', textalign: 'center' }); $("#mb_btn_ok,#mb_btn_no").css({ width: '85px', height: '30px', color: 'white', border: 'none' }); $("#mb_btn_ok").css({ backgroundcolor: '#168bbb' }); $("#mb_btn_no").css({ backgroundcolor: 'gray', marginleft: '20px' }); //右上角关闭按钮hover样式 $("#mb_ico").hover(function () { $(this).css({ backgroundcolor: 'red', color: 'white' }); }, function () { $(this).css({ backgroundcolor: '#ddd', color: 'black' }); }); var _widht = document.documentelement.clientwidth; //屏幕宽 var _height = document.documentelement.clientheight; //屏幕高 var boxwidth = $("#mb_con").width(); var boxheight = $("#mb_con").height(); //让提示框居中 $("#mb_con").css({ top: (_height - boxheight) / 2 + "px", left: (_widht - boxwidth) / 2 + "px" }); } //确定按钮事件 var btnok = function (callback) { $("#mb_btn_ok").click(function () { $("#mb_box,#mb_con").remove(); if (typeof (callback) == 'function') { callback(); } }); } //取消按钮事件 var btnno = function () { $("#mb_btn_no,#mb_ico").click(function () { $("#mb_box,#mb_con").remove(); }); } })();
html代码结构如下,js里面拼接的不直观,给出如下:
<p id="mb_box"></p> <p id="mb_con"> <span id="mb_tit">title</span><a id="mb_ico">x</a> <p id="mb_msg">msg</p> <p id="mb_btnbox"> <input id="mb_btn_ok" type="button" value="确定" /> <input id="mb_btn_no" type="button" value="取消" /> </p> </p>
mb_box为半透明遮罩层,将整个页面遮住,禁止操作;mb_con为提示框。之所以没把mb_con放在mb_box里面,是因为如果放里面的话,对mb_box设置的透明度会影响到mb_con,使mb_con也会变成透明的。之前也试过background-color:rgba(),可惜ie8及以下版本不支持。所以还是把mb_con拿到外面来了,通过设置z-index使其mb_box的上面。
为了使插件使用方便,特意的没有用到图片,全是通过css来控制界面效果,使用时,引用一个js文件就可以了。css样式在js中写死了,这点可能不太灵活,但使用却很方便如果你对界面样式不满意或者与你网站的色彩风格不一致,那只能自行修改了。
由于弹出层(p)无法做到像原始的alert和confirm那样做到页面阻塞效果,因此只能通过 回调函数 来进行模拟。也因为这个原因,后台数据操作只能通过回调函数配合ajax来完成的。
demo如下:
<html xmlns="https://www.w3.org/1999/xhtml"> <head> <title>模拟alert和confirm提示框</title> </head> <body> <input id="add" type="button" value="添加" /> <input id="delete" type="button" value="删除" /> <input id="update" type="button" value="修改" /> <script src="../js/jquery-1.4.1.min.js" type="text/javascript"></script> <script src="../js/jquery.similar.msgbox.js" type="text/javascript"></script> <script type="text/javascript"> $("#add").bind("click", function () { $.msgbox.alert("消息", "哈哈,添加成功!"); }); //回调函数可以直接写方法function(){} $("#delete").bind("click", function () { $.msgbox.confirm("温馨提示", "执行删除后将无法恢复,确定继续吗?温馨提示", function () { alert("你居然真的删除了..."); }); }); function test() { alert("你点击了确定,进行了修改"); } //也可以传方法名 test $("#update").bind("click", function () { $.msgbox.confirm("温馨提示", "确定要进行修改吗?", test); }); //当然你也可以不给回调函数,点击确定后什么也不做,只是关闭弹出层 //$("#update").bind("click", function () { $.msgbox.confirm("温馨提示", "确定要进行修改吗?"); }); </script> </body> </html>
下一篇: 帮我们关下灯,我们要睡觉了
推荐阅读
-
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
-
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
-
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
-
jQuery插件实现模拟alert和confirm
-
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
-
PHP和Jquery和ajax实现下拉淡出瀑布流效果(无需插件)
-
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
-
PHP和Jquery和ajax实现下拉淡出瀑布流效果(无需插件),jqueryajax_PHP教程
-
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
-
PHP和Jquery和ajax实现下拉淡出瀑布流效果(无需插件),jqueryajax_PHP教程