作为插件单独使用
如果是基本弹框功能,直接引用下面CSS和JS即可:
<link rel="stylesheet" href="https://qidian.gtimg.com/lulu/pure/css/common/ui/Button.css"> <link rel="stylesheet" href="https://qidian.gtimg.com/lulu/pure/css/common/ui/Dialog.css">
<script src="https://qidian.gtimg.com/lulu/pure/js/common/ui/Dialog.js"></script>
如果需要用到loading弹框的,则还需要引入Loading.css,如下:
<link rel="stylesheet" href="https://qidian.gtimg.com/lulu/pure/css/common/ui/Loading.css">
弹框基本效果演示
1. alert信息提示框
new Dialog().alert('操作成功!', {
type: 'success'
});
我们可以type参数指定提示的类型,其他内置类型还有:'remind'提示,'danger'警示。
也可以使用自定义的类型,例如:
代码如下:
button.addEventListener('click', function () {
new Dialog().alert('自定义提示,有标题,无图标。', {
title: '系统提醒',
type: 'custom'
});
});
2. confirm确认提示框
button.addEventListener('click', function () {
new Dialog().confirm('<h6>您确定要停用所选的成员吗?</h6><p>成员停用后,可以在停用成员列表中重新启用。</p>', {
buttons: [{
value: '停用',
events: function (event) {
// 按钮禁用
button.disabled = true;
// event.dialog是当前实例对象
event.dialog.remove();
}
}, {}]
});
});
我们可以使用buttons参数指定按钮的文案、类型以及事件。
3. 普通的内容弹框
new Dialog({
title: '普通文本框',
content: '我是一段HTML,啦啦啦啦啦',
buttons: [{
value: '知道啦!'
}]
});
4. 高度拉伸弹框
new Dialog({
title: '中间高度自适应的容器',
height: 'stretch',
content: '<div class="bg-white p20">' + (function () {
var html = '';
for (var i = 0; i < 100; i++) {
html = html + '<img src="https://mat1.gtimg.com/www/mb/images/face/' + i + '.gif" class="db">';
}
return html;
})() + '</div>',
buttons: [{}]
});
通过设置参数height的值为'stretch'实现。最大支持高度为1000px,如果想修改这个值直接修改CSS中对应值即可。如果浏览器高度小于1000px,弹框高度会自动上下拉伸适配。
5. loading弹框
new Dialog().loading();
有时候,弹框内容是Ajax动态请求的,此时在Ajax成功之前是需要一个加载状态的。体验更好的做法是根据最终呈现布局,局部动态loading,但是有时候我们想要偷懒,不想再写一个loading布局,则就可以使用这里的loading弹框。例如下面这个示意:
代码如下:
button.addEventListener('click', function () {
var objDialog = new Dialog({
width: 600
}).loading();
// 请求页面自身
var xhr = new XMLHttpRequest();
xhr.open('get', location.href);
xhr.onload = function () {
objDialog.open(xhr.responseText.replace(/[\w\W]+<pre>([\w\W]+?)<\/pre>[\w\W]+/, '$1'), {
title: '请求内容',
buttons: [{}]
});
};
// 演示loading效果
xhr.send();
});
使用弹框的open()方法可以直接替换弹框显示内容。
6. 弹框打开DOM元素
下拉:
var eleDomTarget = document.getElementById('domDialogTarget');
var objDomDialog;
button.addEventListener('click', function () {
// 如果已经弹框打开过,就直接显示
if (objDomDialog) {
objDomDialog.show();
} else {
eleDomTarget.style.display = 'block';
objDomDialog = new Dialog({
title: 'DOM载入测试',
content: eleDomTarget,
buttons: [{}, {}]
});
}
});
7. iframe内调用
可以参考Peak主体中的弹框文档“iframe内弹框测试”这个示例。
语法和参数
基础语法
基本的弹框使用方法为:
var myDialog = new Dialog(options);
其中:
- options
options是可选参数,支持的参数见下表:
| 参数名称 | 支持类型 | 默认值 | 释义 |
|---|---|---|---|
| title | String | '' | 表示弹框的标题。 |
| content | String Object Function |
'' | 表示弹框显示的主体内容。可以是HTML字符串,或者是DOM对象,也可以是返回HTML字符串或DOM对象的函数。参数类型不同,弹框关闭的方法也不一样,DOM对象关闭执行hide()方法,HTML内容执行remove()方法。 |
| width* | String Number |
'auto' | 标题弹框的主体宽度,可以是纯数值,会当作像素单位处理,也支持其他任意单位,例如 默认值是 |
| height* | String Number |
'auto' | 标题弹框的主体高度,可以是纯数值,会当作像素单位处理,也支持其他任意单位,例如 支持关键字 |
| buttons | Array | [] | 弹框的按钮元素。默认是空数组,表示没有按钮。每个按钮为一个{}对象,含一些可选参数,具体释义见表格下面内容。
|
| onShow* | Function | function () {} | 弹框显示时候的回调。this为当前弹框实例对象,支持一个参数,为当前<dialog>容器元素。 |
| onHide* | Function | function () {} | 弹框隐藏时候的回调。this为当前弹框实例对象,支持一个参数,为当前<dialog>容器元素。 |
| onRemove* | Function | function () {} | 弹框移除时候的回调。this为当前弹框实例对象,支持一个参数,为当前<dialog>容器元素。 |
后面跟随*的参数,为Dialog()方法独有的可选参数。其他扩展方法,无法重置。
buttons参数数组项支持参数如下:
{
type: '',
value: '',
"for": '',
className: '',
events: {}
}
其中:
| 参数名称 | 支持类型 | 默认值 | 释义 |
|---|---|---|---|
| type | String | 'primary' |
表示按钮的类型。和Button.css中按钮类型关键字对应。默认值与当前对象在buttons参数数组中的位置有关。第一个按钮对象,默认值是'primary',也就是蓝色按钮,也就是如果你的弹框只有一个按钮,默认是蓝色。之后的按钮,默认则是白色按钮,如白色的“取消”按钮。 |
| value | String | '确定' |
表示按钮的文字内容。默认值与当前对象在buttons参数数组中的位置有关。如果在数组的第一个选项中,默认值是'确定',如果在后面的选项,则按钮默认值是'取消'。 |
| for | String | '' | 如果for属性值有设置,则按钮会使用<label>元素代替<button>元素。通常该参数值指向一个submit类型按钮的id属性值。 |
| class |
String | '' | 表示按钮上额外添加的类名。 |
| events | Object| |
{} | 表示按钮绑定的事件。可选,如果不设置,会调用弹框关闭事件。
如果只有click事件,可以直接使用Function类型参数,例如: events: |
因此:
1. 如果你的弹框默认就是一个文字为“确定”的确认按钮,则buttons参数内容就是:
{
buttons: [{}]
}
2. 如果你的弹框默认就是一个蓝色确认按钮,但是文字内容是“我知道了”,则buttons参数内容就是:
{
buttons: [{
value: '我知道了'
}]
}
3. 如果你的弹框默认就是一个文字为“确定”的确认按钮,但是是红色的警示按钮,则buttons参数内容就是:
{
buttons: [{
type: 'danger'
}]
}
4. 如果你的弹框默认就有一个蓝色“确定”按钮,和一个白色“取消”按钮,则buttons参数内容就是:
{
buttons: [{}, {}]
}
我们只需要空对象占位就好了。你也可以使用null占位。
Alert弹框语法
模拟浏览器window.alert()弹框。用法如下:
var myDialog = new Dialog(options).alert(content, alertOptions);
其中:
- options
- 可选。这里支持的
options参数值是「基础语法」展示的带有红色星号*的width,height,onShow,onHide,onRemove这5个参数。 - content
- 必须。提示的内容。支持HTML标签。
- alertOptions
- 可选。具体参数值见下表:
| 参数名称 | 支持类型 | 默认值 | 释义 |
|---|---|---|---|
| title | String | '' | alert弹框默认无标题文字,本项目,此参数不需要关心。 |
| type | String | 'remind' | alert弹框的类型, 参数包括'remind', 'success', 'danger', 或者任意自定义'custom'。对应效果图缩略图如下:
|
| buttons | Array | [{}] | 表示按钮。默认为1个蓝色“确定”按钮。 |
实际开发用到可选参数场景并不多,多类似这样:
new Dialog().alert('弹弹弹,弹走鱼尾纹……');
Confirm弹框语法
模拟浏览器window.confirm()弹框。语法如下:
var myDialog = new Dialog(options).confirm(content, confirmOptions);
其中:
- options
- 可选。这里支持的
options参数值是「基础语法」展示的带有红色星号*的width,height,onShow,onHide,onRemove这5个参数。 - content
- 必须。提示的内容。支持HTML标签。
- confirmOptions
- 可选。具体参数值见下表:
| 参数名称 | 支持类型 | 默认值 | 释义 |
|---|---|---|---|
| title | String | '' | 弹框的标题文字,默认无标题。 |
| type | String | 'danger' | 弹框的类型, 参数包括'remind', 'success', 'danger', 或者任意自定义'custom'。同Alert弹框,差别在于图标。 |
| buttons | Array | [{ type: 'danger' }, {}] |
表示按钮。默认为1个红色警示“确定”按钮和1个普通浅色按钮。 |
一般而言,我们需要对第1个警示按钮写事件,也就是确认删除之后干嘛干嘛,如:
new Dialog().confirm('确定弹弹弹,弹走鱼尾纹?', {
buttons: [{
events: function(event) {
/*
* 这里回调,巴拉巴拉小魔仙……
* ......
*/
// event.dialog为弹框实例对象
event.dialog.remove();
}
}, {}]
});
弹框底层open方法语法
作用是替换当前弹框实例为新的弹框内容,包括,标题、主体内容以及按钮。我们每次使用new Dialog()构造的时候,都是一个全新的弹框。有时候,我们希望直接当前弹框内容替换,例如,从loading弹框到普通弹框,就可以使用此方法。
语法如下:
var myDialog = new Dialog(options).open(content, openOptions);
其中:
- options
- 可选。这里支持的
options参数值是「基础语法」展示的带有红色星号*的width,height,onShow,onHide,onRemove这5个参数。 - content
- 必须。弹框内容,支持类型同
options.content。 - openOptions
- 可选。具体参数值见下表:
| 参数名称 | 支持类型 | 默认值 | 释义 |
|---|---|---|---|
| title | String | '' | 弹框的标题文字。 |
| buttons | Array | [] | 表示按钮。默认没有任何按钮。 |
Loading弹框语法
语法如下:
var myDialog = new Dialog(options).loading();
我们可以设定弹框的宽度以及各个回调。loading模式下,标题、关闭按钮、底部按钮都不可见,只有菊花转转转。此方法使用了Loading组件。
弹框实例对象
myDialog就是弹框实例对象,包含了下面这些属性和方法(上面已经展示的略):
{
element: {
// 含半透明遮罩的容器
container: null,
// 弹框主体元素
dialog: null,
// 弹框标题元素
title: null,
// 弹框关闭按钮
close: null,
// 弹框主内容元素
body: null,
// 弹框底部元素
footer: null,
// 弹框按钮1(如果有)
button0: null,
// 弹框按钮2(如果有)
button1: null
},
params: {
title: '',
width: 'auto',
buttons: [],
content: ''
},
// 3个回调方法
callback: {
show: function () {},
hide: function () {},
remove: function () {}
},
// 弹框显示
show: function () {},
// 弹框隐藏
hide: function () {},
// 弹框移除
remove: function () {}
}
本页贡献者:
zhangxinxu