问题描述
最近做的后台管理系统,查看详情弹框用的页面比较多,想抽出来封装成公共组件。但是思路不是很明确,同学们给个思路,最好有代码看下,谢谢!
一个弹窗要做的东西还是挺多的,建议参考一些著名组件的源代码或者思想,比如 artDialog、Bootstrap3-dialog。
一个简单的弹窗可以分为顶部(标题、关闭等)、内容(任何内容)、底部(确定、取消等),注意组件要把 HTML、JavaScript 和 CSS 组织在一起,与其它代码解耦,只通过配置生成弹窗。
可以创建一个弹窗类,每次实例化一个弹窗,互相独立。实例化时传入配置对象如:
var d = new Dialog({
// ...
title: "",
content: "",
buttons: [{
content: "",
click: function(){},
}],
// ...
})
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
5 回答1.9k 阅读
介于题主的目前水平,这里主要介绍基础原理以及热门开发库是怎么设计的
单例模式
试想以下,当我们单击登录按钮的时候,页面会出现一个登录浮窗,而这个浮窗是唯一的,
无论单击多少次登录按钮,这个浮窗都只会被创建一次,那么这个登录浮窗就适合用单例模式来创建。[1]
具体实现: 传送门-gist.github
进不去地看这里 ↓
React
React渲染原理基于虚拟DOM树,为避免污染树结构,而Modal又是典型的脱离树之外的DOM,
所以React提供了一个API叫
Portals
Portals
提供了一种将子项呈现为存在于父组件的DOM层次结构之外的DOM节点的第一类方法。[2]简而言之,一般基于React开发都会使用这个API来创建Modal组件
详解文章:传送门-知乎专栏
Vue
为啥vue被放在最后面,因为我不怎么研究vue?
感觉vue就比较自由,没有那么多的约束,你可以放在body最后面像React那样,
也可以提前写好绝对定位,简单地利用
v-if
或者v-show
控制展示和隐藏这有个非常简单地Modal组件源码解析:传送门
以及我写地性能优化文章JavaScript惰性单例与vue性能优化应用
参考