作为插件单独使用
如果是基本弹框功能,直接引用下面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