0%

简单的JQ-alert插件

重写window.alert


其实主要还是想多练手,毕竟熟能生巧,看得多写得多了自然会的就多了。
理解理解这简单的JQ插件思路,alert为例。

对于alert基本上前端汪都不会陌生了,简单的理解下封装的思路吧,虽然这个插件也非常简单,之前在职的公司在用的,大部分copy下来了。
看了一遍之前的代码,利用js和css就可以了,插件封装的思想跟JQ插件一致,用extend函数整合用户传入的参数对象,然后实现定制alert。
插件中先把弹窗dom结构写好,用append添加到body节点下,绑定按钮回调事件,根据调用参数动态的改变alert弹窗的宽高这些,非常实用。

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
window.alert = function(options){
if(typeof(options) != 'object'){
options = {
con:options
}
}
var opts = $.extend({
tit:'标题',
con:'内容',
btn:['确定'],
width:260,
height:225,
tClose: true,
fClose: true,
ok: function() {},
no: function() {}
},options);
var btnStr = '',
btnCount = opts.btn.length,
btnWidth = opts.width / btnCount;
for(var i = 0; i < btnCount; i++) {
if(i == 0) {
btnStr += '<div style="display:inline-block;"><button class="alert-btn trueBtn" id="alertTrue" style="width:' + btnWidth + 'px;">' + opts.btn[i] + '</button></div >';
} else {
btnStr = '<div style="display:inline-block;"><button class="alert-btn falseBtn" id="alertFalse" style="width:' + btnWidth + 'px;">' + opts.btn[i] + '</button></div >' + btnStr;
}
}
var alertStr = '' +
'<div class="layout alert-layout" id="alert-layout">' +
'<div class="alert" style="width:' + opts.width + 'px; height:' + opts.height + 'px;">' +
'<div class="alert-tit">' + opts.tit + '</div>' +
'<section class="alert-con" style="width:' + opts.width + 'px; height:' + (opts.height-65) + 'px;">' + opts.con + '</section>' +
'<div class="alert-btn-group">' + btnStr + '</div>' +
'</div>' +
'</div>';
$('body').append(alertStr);
$('#alertTrue').click(function() {
if(opts.tClose) {
alertClose();
}
opts.ok();
});
$('#alertFalse').click(function() {
if(opts.fClose) {
alertClose();
}
opts.no();
});
function alertClose() {
$('#alert-layout').remove();
}
}

alert({
tit:'练习封装alert',
con:'点击OK跳转至blog',
btn:['OK','NO'],
ok:function(){
location.href = 'https://tanelmer.github.io'
}
});