MessageBox弹框替代系统自带的alert、confirm -- 高仿ElementUI MessageBox
warning:
这篇文章距离上次修改已过184天,其中的内容可能已经有所变动。
以下是一个简化版的MessageBox
弹框替代品的示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Custom MessageBox</title>
<style>
.modal-mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: table;
transition: opacity 0.3s ease;
}
.modal-wrapper {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.modal-container {
width: 300px;
margin: 0px auto;
padding: 20px;
background-color: #fff;
border-radius: 2px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);
transition: all 0.3s ease;
}
.modal-header, .modal-footer {
padding: 15px;
text-align: center;
font-size: 16px;
}
.modal-body {
margin: 20px 0;
}
.modal-default-button {
float: right;
}
</style>
</head>
<body>
<div id="app">
<button @click="open">Open MessageBox</button>
</div>
<script>
const Vue = (function () {
let data = null;
let oldEl = null;
return {
data(el, newData) {
data = newData;
this.observe(el, data);
},
observe(el, data) {
oldEl = el;
Object.keys(data).forEach((key) => {
this.proxy(key, data);
});
},
proxy(key, data) {
Object.defineProperty(this, key, {
get() {
return data[key];
},
set(val) {
data[key] = val;
oldEl.innerHTML = this.compile(oldEl, data);
}
});
},
compile(el, data) {
const attrs = el.attributes;
let txt = el.innerHTML;
Array.from(attrs).forEach((attr) => {
if (attr.nodeName === 'v-text') {
txt = txt.replace(attr.nodeValue, data[attr.nodeValue]);
}
});
return txt;
},
mount(el,
评论已关闭