模仿alert个性化网页小弹窗特效【转载】

看到论坛上有人模仿alert,自己也写了一个。
本来想模仿winapi里的MessageBox
但可惜js 不支持,阻塞模式。
返回值只能用异步了。
支持FF、ie、opera。
DOCTYPE 可以申明,也可以不申明。

存在问题: 

  1. 在opera 里图层不能透明 
  2. 对于页面内有iframe的也无法使用
  3. 在ie里无法遮住select的
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  5. <title>MessageBox演示</title>
  6. <script language="javascript">
  7. /*******************************************************************************************
  8. * http://2lin.net
  9. * Email:caoailin@gmail.com
  10. * QQ:38062022
  11. * Creation date: 2006-11-27
  12. * 下面的内容可以拷贝到一个JS文件里面
  13. *********************************************************************************************/
  14. // 控制按钮常量
  15. var MB_OK = 0;
  16. var MB_CANCEL = 1;
  17. var MB_OKCANCEL = 2;
  18. var MB_YES = 3;
  19. var MB_NO = 4;
  20. var MB_YESNO = 5;
  21. var MB_YESNOCANCEL = 6;
  22. // 控制按钮文本
  23. var MB_OK_TEXT = "确定";
  24. var MB_CANCEL_TEXT = "取消";
  25. var MB_YES_TEXT = " 是 ";
  26. var MB_NO_TEXT = " 否 ";
  27. //提示图标
  28. var MB_ICON = "http://www.webjx.com/files/080516/1_011452.gif";
  29. //委托方法
  30. var MB_OK_METHOD = null;
  31. var MB_CANCEL_METHOD = null;
  32. var MB_YES_METHOD = null;
  33. var MB_NO_METHOD = null;
  34. var MB_BACKCALL = null;
  35. var MB_STR = '<style type="text/css"><!--' +
  36. 'body{margin:0px;}' +
  37. '.msgbox_title{background-color: #B1CDF3;height:25px;position:relative;font-size:14px;line-height:25px;padding-left:10px;border-bottom:1px solid #000;}' +
  38. '.msgbox_control{text-align:center;clear:both;height:28px;}' +
  39. '.msgbox_button{background-color: #B1CDF3;border:1px solid #003366;font-size:12px;line-height:20px;height:21px;}' +
  40. '.msgbox_content{padding:10px;float:left;line-height: 20px;}' +
  41. '.msgbox_icon{width: 50px;height: 50px;float: left;text-align: center;line-height:50px;padding-top:10px;}' +
  42. '.msgbox_mask{position:absolute;left:0px;top:0px;z-index:99999;background-color:#333333;width:100%;height:100%;}' +
  43. '.msgbox{background-color: #EFFAFE;position: absolute;height:auto;font-size:12px;top:50%;left:50%;border:1px solid #999999;}' +
  44. '--></style>' +
  45. '<div id="msgBoxMask" class="msgbox_mask" style="filter: alpha(opacity=0);display:none;"></div>' +
  46. '<div class="msgbox" style="display:none; z-index:100000;" id="msgBox">' +
  47. '<div class="msgbox_title" id="msgBoxTitle"></div>' +
  48. '<div class="msgbox_icon" id="msgBoxIcon"></div>' +
  49. '<div class="msgbox_content" id="msgBoxContent"></div>' +
  50. '<div class="msgbox_control" id="msgBoxControl"></div></div>';
  51. var Timer = null;
  52. document.write(MB_STR);
  53. var icon = new Image();
  54. icon.src = MB_ICON;
  55. /* 提示对话框
  56. * 参数 1 : 提示内容
  57. * 参数 2 : 提示标题
  58. * 参数 3 : 图标路径
  59. * 参数 4 : 按钮类型
  60. */
  61. function MessageBox(){
  62. var _content = arguments[0] || "这是一个对话框!";
  63. var _title   = arguments[1] || "提示";
  64. var _icon    = arguments[2] || MB_ICON;
  65. var _button  = arguments[3] || MB_OK;
  66. MB_BACKCALL  = arguments[4];
  67. var _iconStr = '<img src="{0}">';
  68. var _btnStr  = '<input name="{0}" id="{0}" type="button" class="msgbox_button" value="{1}" οnclick="MBMethod(this)" />';
  69. switch(_button)
  70. {
  71. case MB_CANCEL      : _btnStr_btnStr = _btnStr.toFormatString("msgBoxBtnCancel", MB_CANCEL_TEXT); break;
  72. case MB_YES         : _btnStr_btnStr = _btnStr.toFormatString("msgBoxBtnYes", MB_YES_TEXT); break;
  73. case MB_NO          : _btnStr_btnStr = _btnStr.toFormatString("msgBoxBtnNo", MB_NO_TEXT); break;
  74. case MB_OKCANCEL    :
  75. _btnStr_btnStr = _btnStr.toFormatString("msgBoxBtnOk", MB_OK_TEXT) + "  " +
  76. _btnStr.toFormatString("msgBoxBtnCancel", MB_CANCEL_TEXT);
  77. break;
  78. case MB_YESNO       :
  79. _btnStr_btnStr = _btnStr.toFormatString("msgBoxBtnYes", MB_YES_TEXT) + "  " +
  80. _btnStr.toFormatString("msgBoxBtnNo", MB_NO_TEXT);
  81. break;
  82. case MB_YESNOCANCEL :
  83. _btnStr_btnStr = _btnStr.toFormatString("msgBoxBtnYes", MB_YES_TEXT) + "  " +
  84. _btnStr.toFormatString("msgBoxBtnNo", MB_NO_TEXT) + "  " +
  85. _btnStr.toFormatString("msgBoxBtnCancel", MB_CANCEL_TEXT);
  86. break;
  87. default :  _btnStr_btnStr = _btnStr.toFormatString("msgBoxBtnOk", MB_OK_TEXT);  break;
  88. }
  89. //解决 FF 下会复位
  90. ScrollTop = GetBrowserDocument().scrollTop;
  91. ScrollLeft = GetBrowserDocument().scrollLeft;
  92. GetBrowserDocument().style.overflow = "hidden";
  93. GetBrowserDocument().scrollTop = ScrollTop;
  94. GetBrowserDocument().scrollLeft = ScrollLeft;
  95. $("msgBoxTitle").innerHTML = _title;
  96. $("msgBoxIcon").innerHTML = _iconStr.toFormatString(_icon);
  97. $("msgBoxContent").innerHTML = _content;
  98. $("msgBoxControl").innerHTML =  _btnStr;
  99. OpacityValue = 0;
  100. $("msgBox").style.display = "";
  101. try{$("msgBoxMask").filters("alpha").opacity = 0;}catch(e){};
  102. $("msgBoxMask").style.opacity = 0;
  103. $("msgBoxMask").style.display = "";
  104. $("msgBoxMask").style.height = GetBrowserDocument().scrollHeight + "px";
  105. $("msgBoxMask").style.width = GetBrowserDocument().scrollWidth + "px";
  106. Timer = setInterval("DoAlpha()",1);
  107. //设置位置
  108. $("msgBox").style.width = "100%";
  109. $("msgBox").style.width = ($("msgBoxIcon").offsetWidth + $("msgBoxContent").offsetWidth + 2) + "px";
  110. $("msgBox").style.marginTop = (-$("msgBox").offsetHeight/2 + GetBrowserDocument().scrollTop) + "px";
  111. $("msgBox").style.marginLeft = (-$("msgBox").offsetWidth/2 + GetBrowserDocument().scrollLeft) + "px";
  112. if(_button == MB_OK || _button == MB_OKCANCEL){
  113. $("msgBoxBtnOk").focus();
  114. }else if(_button == MB_YES || _button == MB_YESNO || _button == MB_YESNOCANCEL){
  115. $("msgBoxBtnYes").focus();
  116. }
  117. }
  118. var OpacityValue = 0;
  119. var ScrollTop = 0;
  120. var ScrollLeft = 0;
  121. function GetBrowserDocument()
  122. {
  123. var _dcw = document.documentElement.clientHeight;
  124. var _dow = document.documentElement.offsetHeight;
  125. var _bcw = document.body.clientHeight;
  126. var _bow = document.body.offsetHeight;
  127. if(_dcw == 0) return document.body;
  128. if(_dcw == _dow) return document.documentElement;
  129. if(_bcw == _bow && _dcw != 0)
  130. return document.documentElement;
  131. else
  132. return document.body;
  133. }
  134. function SetOpacity(obj,opacity){
  135. if(opacity >=1 ) opacityopacity = opacity / 100;
  136. try{obj.style.opacity = opacity; }catch(e){}
  137. try{
  138. if(obj.filters){
  139. obj.filters("alpha").opacity = opacity * 100;
  140. }
  141. }catch(e){}
  142. }
  143. function DoAlpha(){
  144. if (OpacityValue > 20){clearInterval(Timer);return 0;}
  145. OpacityValue += 5;
  146. SetOpacity($("msgBoxMask"),OpacityValue);
  147. }
  148. function MBMethod(obj)
  149. {
  150. switch(obj.id)
  151. {
  152. case "msgBoxBtnOk" : if(MB_BACKCALL) {MB_BACKCALL(MB_OK);} else {if(MB_OK_METHOD) MB_OK_METHOD();} break;
  153. case "msgBoxBtnCancel" : if(MB_BACKCALL) {MB_BACKCALL(MB_CANCEL);} else {if(MB_CANCEL_METHOD) MB_CANCEL_METHOD();} break;
  154. case "msgBoxBtnYes" : if(MB_BACKCALL) {MB_BACKCALL(MB_YES);} else {if(MB_YES_METHOD) MB_YES_METHOD();} break;
  155. case "msgBoxBtnNo" : if(MB_BACKCALL) {MB_BACKCALL(MB_NO);} else {if(MB_NO_METHOD) MB_NO_METHOD();} break;
  156. }
  157. MB_OK_METHOD = null;
  158. MB_CANCEL_METHOD = null;
  159. MB_YES_METHOD = null;
  160. MB_NO_METHOD = null;
  161. MB_BACKCALL = null;
  162. MB_OK_TEXT = "确定";
  163. MB_CANCEL_TEXT = "取消";
  164. MB_YES_TEXT = " 是 ";
  165. MB_NO_TEXT = " 否 ";
  166. $("msgBox").style.display = "none";
  167. $("msgBoxMask").style.display = "none";
  168. GetBrowserDocument().style.overflow = "";
  169. GetBrowserDocument().scrollTop = ScrollTop;
  170. GetBrowserDocument().scrollLeft = ScrollLeft;
  171. }
  172. String.prototype.toFormatString = function(){
  173. var _str = this;
  174. for(var i = 0; i < arguments.length; i++){
  175. _str = eval("_str.replace(///{"+ i +"//}/ig,'" + arguments[i] + "')");
  176. }
  177. return _str;
  178. }
  179. function $(obj){
  180. return document.getElementById(obj);
  181. }
  182. ///
  183. </script>
  184. <script language="javascript">
  185. function test()
  186. {
  187. var _msg = "<font color=red><b>演示:</b></font><br/>普通对话框!";
  188. MessageBox(_msg);
  189. }
  190. function test1()
  191. {
  192. MB_OK_METHOD = function(){alert('你按了OK');}
  193. MB_YES_METHOD = function(){alert('你按了YES');}
  194. MB_NO_METHOD = function(){alert('你按了NO');}
  195. MB_CANCEL_METHOD = function(){alert('你按了CANCEL');}
  196. var _msg = "<font color=red><b>演示:</b></font><br/>调用对话框。是、否、取消";
  197. MessageBox(_msg,"演示",null,MB_YESNOCANCEL);
  198. }
  199. function test2()
  200. {
  201. var _msg = "<font color=red><b>演示:</b></font><br/>调用对话框。是、否、取消";
  202. MessageBox(_msg,"演示",MB_ICON,MB_YESNOCANCEL,callback);
  203. }
  204. function test4()
  205. {
  206. var _msg = "<font color=red><b>演示:</b></font><br/>调用对话框。确定、取消";
  207. MessageBox(_msg,"演示",MB_ICON,MB_OKCANCEL,callback);
  208. }
  209. function callback(value)
  210. {
  211. switch(value)
  212. {
  213. case MB_OK : alert('你按了OK'); break;
  214. case MB_YES : alert('你按了YES'); break;
  215. case MB_NO : alert('你按了NO'); break;
  216. case MB_CANCEL : alert('你按了CANCEL'); break;
  217. }
  218. }
  219. function test3()
  220. {
  221. MB_YES_TEXT = "演示一";
  222. MB_NO_TEXT = "演示二";
  223. MB_CANCEL_TEXT = "演示三";
  224. var _msg = "<font color=red><b>演示:</b></font><br/>这是自定义的对话框<br/> <font color=green>MB_YES_TEXT  MB_NO_TEXT MB_CANCEL_TEXT MB_OK_TEXT</font>";
  225. MessageBox(_msg,"演示",MB_ICON,MB_YESNOCANCEL,callback);
  226. }
  227. </script>
  228. </head>
  229. <body>
  230. <table width="1500" height="1000" border="1" bordercolor="#000000">
  231. <tr>
  232. <td> </td>
  233. <td align="center"><a href="javascript:test()">普通演示</a></td>
  234. <td> </td>
  235. </tr>
  236. <tr>
  237. <td> </td>
  238. <td align="center"><a href="javascript:test1()">回调演示一</a>
  239. <label></label></td>
  240. <td> </td>
  241. </tr>
  242. <tr>
  243. <td> </td>
  244. <td align="center"><a href="javascript:test2()">回调演示二
  245. </a></td>
  246. <td> </td>
  247. </tr>
  248. <tr>
  249. <td> </td>
  250. <td align="center"><a href="javascript:test4()">回调演示三</a><a href="javascript:test3()"></a></td>
  251. <td> </td>
  252. </tr>
  253. <tr>
  254. <td> </td>
  255. <td align="center"><a href="javascript:test3()">自定义演示
  256. </a></td>
  257. <td> </td>
  258. </tr>
  259. </table>
  260. </body>
  261. </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值