一款简单的弹出层组件,支持队列式弹出,对读屏软件有较好支持。
Nice Popup 支持 alert/confirm/dialog 三种弹出层。
Alter 弹出层默认拥有一个 “确定” 按钮,点击后关闭。弹出层中的文案(支持 HTML)可以通过 API 指定。
nicePopup.alert.open('我是疯儿你是傻')当然,我们也可以为 alter 弹出层指定类型。
nicePopup.alert.open('缠缠绵绵到天涯', 'success')此时 alert 弹出层会显示一个 type-icon 元素。
Confirm 弹出层默认拥有两个按钮,“确定” 和 “取消”。点击取消会关闭弹出层,点击确定则执行一个指定的回调函数。
nicePopup.confirm.open('你确定要演唱吗?', function (popup) {
console.log('I will rock you!')
//关闭弹出层
popup.close()
})Dialog 弹出层需要页面上存在对应的 DOM 元素才能使用。为需要的元素添加类 nice-popup :
<div id="popupEntity" class="nice-popup">弹出层展示内容</div>在 Nice Popup 初始化后,就可以通过两种方式弹出 dialog。
//首先进行初始化
nicePopup.init()
//第一种方式,通过 selector 字符串弹出 dialog
nicePopup.dialog.open('#popupEntity')
//第二种方式,通过 DOMElement 对象弹出 dialog
nicePopup.dialog.open(document.getElementById('popupEntity'))| 参数 | 默认值 | 说明 |
|---|---|---|
| autoClose | false | 是否自动关闭,可以填写自动关闭的延时毫秒数 |
| effect | 'popin' | 弹出层显示/隐藏效果 |
| modal | true | 是否是模态框,模态框会有一个遮罩层显示 |
| closeable | true | 是否显示关闭按钮 |
Alert, confirm 弹出层遵循以上配置。Dialog 弹出层可以通过 nicePoup.dialog.open 方法动态指定该弹出层实例的配置。
Nice Popup 提供修改默认配置方法。
nicePoup.config({
closeable: false
})通过 nicePoup.config 方法修改的配置将会成为新的默认配置
非模块化加载时,Nice Popup 的命名空间是 nicePoup。
| 属性/方法 | 参数 | 说明 |
|---|---|---|
| alert | - | 属性,alert 弹出层 |
| confirm | - | 属性,confirm 弹出层 |
| dialog | - | 属性,dialog 弹出层 |
| config | Config:Object | 方法,修改默认配置 |
| close | - | 方法,关闭当前一个弹出层 |
| closeAll | - | 方法,关闭所有弹出层 |
| init | - | 方法,初始化 dialog 弹出层 |
Alert 属性下面包含 alert 弹出层相关 API。
| 属性/方法 | 参数 | 说明 |
|---|---|---|
| open | Text:String[, Type:String] | 弹出一个 alert 弹出层 |
注意 alert 并没有 close 方法,可以使用 nicePoup.close 方法关闭。
open 方法的第二个参数 Type 可以为空。而除了 success/wraning/wrong 三种状态之外,用户可以使用任意字符串作为参数,产生更多的状态,但需要在 CSS 中配置对应样式。
Confirm 属性下面包含 confirm 弹出层相关 API。Confirm 与 alert 不同之处在于它拥有两个按钮,“确定” 与 “取消”。而当用户点击 “确定” 时则会执行用户指定的方法。
| 属性/方法 | 参数 | 说明 |
|---|---|---|
| open | Text:String[, Fn:Function] | 弹出一个 confirm 弹出层 |
注意 confirm 也没有 close 方法。但是在 Fn 函数中会传入一个拥有 close 方法的弹出层对象,它是一个 Popup 类的实例。
Dialog 与 alert 和 confirm 不太相同。没有过多的默认样式,只能调用已存在的拥有 nice-popup 类的元素。
| 属性/方法 | 参数 | 说明 |
|---|---|---|
| open | Selector:String | DOMElement:Object[, Config:Object] |
| close | - | 关闭当前一个弹出层 |
Dialog 的 close 的作用等同于 nicePopup.close。
当 nicePopup 初始化的时候会寻找此时文档中所有拥有 nice-popup 类的元素并为其一一生成对应的 Popup 实例。
如果不需要动画,可以设置默认参数中的 effect 为空。
nicePopup.config({
effect: ''
})如果需要更换弹出动画,可以指定一个其他的 effect 之后配置 CSS,比如:
nicePopup.config({
effect: 'fade'
}).nice-popup.fade {
animation-name: fadeIn;
opacity: 1; top: 50%
}
.nice-popup.fade.reverse {
animation-name: fadeOut;
opacity: 0; top: -200%
}
@keyframes fadein {
0% {top: 0px; opacity: 0;}
100% {top: 0px; opacity: 1;}
}
@keyframes fadeout {
0% {top: 0px; opacity: 1;}
99% {top: 0px; opacity: 0;}
100% {top: -200%; opacity: 0;}
}一些已经设计好的动画效果可以从 DEMO 页最下面体验。
居中实现使用了 position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%)。
所以当你处理样式的时候,需要对此谨慎。
组件中默认有按钮样式。当对一个 dialog 添加按钮的时候可以使用默认按钮结构与样式,快速方便。
<div class="popup-btns">
<a class="ok" href="javascript:">去支付</a>
<a class="cancel" href="javascript:">取消</a>
</div>需要注意的是,按钮元素尽量使用赋予 href 属性的 a 元素。因为这样可以更加容易实现自动聚焦功能。
Nice Popup 会在弹出后尝试自动聚焦 .ok 的元素。
var okBtn = this.dom.querySelector('.ok')
okBtn && okBtn.focus()当弹出层获得焦点后,可以方便习惯键盘操作的用户执行一下步任务,而不是一直按 Tab 键寻找元素。
