自编jQuery插件实现模拟alert和confirm

如今绝大多数网站都不用自带的alert和confirm了,由于界面太生硬了。所以这个插件就这样产生了本身定制一个的想法......
啥也不说,先上图,有图有真相 :)

如今绝大多数网站都不用自带的alert和confirm了,由于界面太生硬了。所以这个插件就这样产生了...javascript

来看插件的实现代码吧:css

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
( 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 += '<div id="mb_box"></div><div id="mb_con"><span id="mb_tit">' + title + '</span>' ;
     _html += '<a id="mb_ico">x</a><div id="mb_msg">' + msg + '</div><div 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 += '</div></div>' ;
  
     //必须先将_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里面拼接的不直观,给出以下:html

?
1
2
3
4
5
6
7
8
9
< div id = "mb_box" ></ div >
< div id = "mb_con" >
     < span id = "mb_tit" >title</ span >< a id = "mb_ico" >x</ a >
     < div id = "mb_msg" >msg</ div >
     < div id = "mb_btnbox" >
       < input id = "mb_btn_ok" type = "button" value = "肯定" />
       < input id = "mb_btn_no" type = "button" value = "取消" />
     </ div >
</ div >

  mb_box为半透明遮罩层,将整个页面遮住,禁止操做;mb_con为提示框。之因此没把mb_con放在mb_box里面,是由于若是放里面的话,对mb_box设置的透明度会影响到mb_con,使mb_con也会变成透明的。以前也试过background-color:rgba(),惋惜ie8及如下版本不支持。因此仍是把mb_con拿到外面来了,经过设置z-index使其mb_box的上面。java

  为了使插件使用方便,特地的没有用到图片,全是经过css来控制界面效果,使用时,引用一个js文件就能够了。css样式在js中写死了,这点可能不太灵活,但使用却很方便若是你对界面样式不满意或者与你网站的色彩风格不一致,那只能自行修改了。jquery

  因为弹出层(div)没法作到像原始的alert和confirm那样作到页面阻塞效果,所以只能经过 回调函数 来进行模拟。也由于这个缘由,后台数据操做只能经过回调函数配合ajax来完成的。ajax

Demo以下:app

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
< html xmlns = "http://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 >

代码量并很少,若有什么疑问能够留言 :)函数

 

出处:http://www.jb51.net/article/54577.htm网站

相关文章
相关标签/搜索