JavaScript 单例模式实现自定义弹窗
作者:小括号时间:2026-10-24 16:40:52浏览:412
本文介绍如何使用 JavaScript 单例模式封装一个可复用的自定义弹窗组件。该组件支持自定义标题、内容以及确认和关闭时的回调函数,通过单例机制确保全局仅存在一个弹窗实例,优化资源管理并提供简洁的调用方式。
本文分享使用 JavaScript 单例模式构建自定义弹窗的具体实现代码,供读者参考学习。
功能说明
- 支持设置弹窗标题。
- 支持定义弹窗显示的具体内容。
- 支持配置在点击确认或关闭按钮时触发的回调函数。
完整代码示例
const Dialog = (function () {
class Dialog {
constructor () {
this.ele = document.createElement('div')
this.ele.className = 'dialog'
document.body.appendChild(this.ele)
this.callback = null
this.setEvent()
}
setContent ({ text, topicText, confirmText, cancelText } = options) {
this.ele.innerHTML = null
const top = document.createElement('div')
top.className = 'top'
const topic = document.createElement('span')
topic.className = 'topic'
topic.innerHTML = topicText
const close = document.createElement('span')
close.className = 'close'
close.innerHTML = '×'
top.appendChild(topic)
top.appendChild(close)
const middle = document.createElement('div')
middle.className = 'middle'
const content = document.createElement('div')
content.className = 'content'
content.innerHTML = text
middle.appendChild(content)
const bottom = document.createElement('div')
bottom.className = 'bottom'
const confirm = document.createElement('button')
confirm.className = 'confirm'
confirm.innerHTML = confirmText
const cancel = document.createElement('button')
cancel.className = 'cancel'
cancel.innerHTML = cancelText
bottom.appendChild(confirm)
bottom.appendChild(cancel)
const wrap = document.createElement('div')
this.ele.appendChild(top)
this.ele.appendChild(middle)
this.ele.appendChild(bottom)
this.ele.style.display = 'block'
}
setEvent () {
this.ele.addEventListener('click', e => {
e = e || window.event
const target = e.target || e.srcElement
if (target.className === 'close') {
this.ele.style.display = 'none'
console.log('close')
}
if (target.className === 'confirm') {
this.ele.style.display = 'none'
this.callback(true)
}
if (target.className === 'cancel') {
this.ele.style.display = 'none'
this.callback(false)
}
})
}
}
let instance = null
return function (options, cb) {
if (!instance) instance = new Dialog()
instance.setContent(options)
instance.callback = cb || function () {}
return instance
}
})()
const dialog = new Dialog({
text: '提示文字',
topicText: '标题',
confirmText: '确定',
cancelText: '取消'
}, res => { console.log(res) })
运行效果展示

以上就是本文的全部内容,希望能为读者的学习提供有益帮助,同时也欢迎大家继续支持本站。
作者最新文章
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
