自編jQuery插件實(shí)現(xiàn)模擬alert和confirm
啥也不說(shuō),先上圖,有圖有真相 :)


現(xiàn)在絕大多數(shù)網(wǎng)站都不用自帶的alert和confirm了,因?yàn)榻缑嫣擦恕R虼诉@個(gè)插件就這樣產(chǎn)生了...
來(lái)看插件的實(shí)現(xiàn)代碼吧:
(function () {
$.MsgBox = {
Alert: function (title, msg) {
GenerateHtml("alert", title, msg);
btnOk(); //alert只是彈出消息,因此沒(méi)必要用到回調(diào)函數(shù)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,再設(shè)置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' });
//右上角關(guān)閉按鈕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代碼結(jié)構(gòu)如下,js里面拼接的不直觀,給出如下:
<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為半透明遮罩層,將整個(gè)頁(yè)面遮住,禁止操作;mb_con為提示框。之所以沒(méi)把mb_con放在mb_box里面,是因?yàn)槿绻爬锩娴脑?,?duì)mb_box設(shè)置的透明度會(huì)影響到mb_con,使mb_con也會(huì)變成透明的。之前也試過(guò)background-color:rgba(),可惜ie8及以下版本不支持。所以還是把mb_con拿到外面來(lái)了,通過(guò)設(shè)置z-index使其mb_box的上面。
為了使插件使用方便,特意的沒(méi)有用到圖片,全是通過(guò)css來(lái)控制界面效果,使用時(shí),引用一個(gè)js文件就可以了。css樣式在js中寫(xiě)死了,這點(diǎn)可能不太靈活,但使用卻很方便如果你對(duì)界面樣式不滿意或者與你網(wǎng)站的色彩風(fēng)格不一致,那只能自行修改了。
由于彈出層(div)無(wú)法做到像原始的alert和confirm那樣做到頁(yè)面阻塞效果,因此只能通過(guò) 回調(diào)函數(shù) 來(lái)進(jìn)行模擬。也因?yàn)檫@個(gè)原因,后臺(tái)數(shù)據(jù)操作只能通過(guò)回調(diào)函數(shù)配合ajax來(lái)完成的。
Demo如下:
<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("消息", "哈哈,添加成功!");
});
//回調(diào)函數(shù)可以直接寫(xiě)方法function(){}
$("#delete").bind("click", function () {
$.MsgBox.Confirm("溫馨提示", "執(zhí)行刪除后將無(wú)法恢復(fù),確定繼續(xù)嗎?溫馨提示", function () { alert("你居然真的刪除了..."); });
});
function test() {
alert("你點(diǎn)擊了確定,進(jìn)行了修改");
}
//也可以傳方法名 test
$("#update").bind("click", function () {
$.MsgBox.Confirm("溫馨提示", "確定要進(jìn)行修改嗎?", test);
});
//當(dāng)然你也可以不給回調(diào)函數(shù),點(diǎn)擊確定后什么也不做,只是關(guān)閉彈出層
//$("#update").bind("click", function () { $.MsgBox.Confirm("溫馨提示", "確定要進(jìn)行修改嗎?"); });
</script>
</body>
</html>
代碼量并不多,如有什么疑問(wèn)可以留言 :)
- 修改apache配置文件去除thinkphp url中的index.php
- iOS自定義提示彈出框?qū)崿F(xiàn)類似UIAlertView的效果
- iOS中 LGLAlertView 提示框的實(shí)例代碼
- iOS中UIAlertView警告框組件的使用教程
- iOS自定義alertView提示框?qū)嵗窒?/a>
- 移動(dòng)端html5圖片上傳方法【更好的兼容安卓IOS和微信】
- js confirm()方法的使用方法實(shí)例
- javascript window.confirm確認(rèn) 取消對(duì)話框?qū)崿F(xiàn)代碼小結(jié)
- Extjs Ext.MessageBox.confirm 確認(rèn)對(duì)話框詳解
- iOS移動(dòng)端(H5)alert/confirm提示信息去除網(wǎng)址(URL)
相關(guān)文章
基于 jQuery 實(shí)現(xiàn)鍵盤(pán)事件監(jiān)聽(tīng)控件
這篇文章主要介紹了基于 jQuery 的鍵盤(pán)事件監(jiān)聽(tīng)控件,需要的朋友可以參考下2019-04-04
jquery插件開(kāi)發(fā)之實(shí)現(xiàn)google+圈子選擇功能
最近項(xiàng)目中用到的一個(gè)效果,類似于Google+的添加圈子功能。本文插件約8成封裝,好多功能是依據(jù)項(xiàng)目中實(shí)際需求寫(xiě)的。若要使用,可根據(jù)自身情況擴(kuò)展修改2014-03-03
Tinymce+jQuery.Validation使用產(chǎn)生的BUG
在IE6下,當(dāng)頁(yè)面有advanced模式的Tinymce編輯器,并且,并且jquery.validation使用了jquery.metadata時(shí)會(huì)出現(xiàn)以下問(wèn)題2010-03-03
JQuery實(shí)現(xiàn)點(diǎn)擊div以外的位置隱藏該div窗口
鼠標(biāo)點(diǎn)擊div外的地方讓div窗口隱藏消失,實(shí)現(xiàn)方法有很多,在本文將為大家介紹下jquery中時(shí)如何實(shí)現(xiàn)的,感興趣的朋友不要錯(cuò)過(guò)了哈2013-09-09
jquery瀏覽器滾動(dòng)加載技術(shù)實(shí)現(xiàn)方案
Google閱讀器上有一個(gè)AJAX效果很不錯(cuò),就是閱讀項(xiàng)目時(shí)不需要翻頁(yè),瀏覽器滾動(dòng)條往下拉到一定位置時(shí)自動(dòng)加載新的一批項(xiàng)目進(jìn)來(lái),一直到所有項(xiàng)目加載完為止。對(duì)于我來(lái)說(shuō)再好不過(guò)了,因?yàn)槲液懿幌矚g翻頁(yè),尤其是輸入頁(yè)碼再定位到頁(yè)。2014-06-06

