让我们来比较看一下错误消息的显示。第一个使用了内置的alert,第二个使用了sweetAlert2。
alert('哎呦……出错了!');
sweetAlert( '哎呦……', '出错了!', 'error' )
是不是非常的酷?无论你是在电脑、手机还是平板上,SweetAlert2都会在页面上自动居中显示,这看起来非常棒。SweetAlert2还可高度定制,正如下面你所看到的!
标题与文本的信息弹窗
swal( '互联网?', '还在吗?', 'question' )
成功信息弹窗!
swal( '干得漂亮!', '你点击了按钮!', 'success' )
定时关闭信息弹窗
swal({ title: '自动关闭弹窗!', text: '2秒后自动关闭。', timer: 2000 }).then( function () {}, // handling the promise rejection function (dismiss) { if (dismiss === 'timer') { console.log('I was closed by the timer') } } )
自定义HTML描述和按钮
swal({ title: '<i>HTML</i> <u>示例</u>', type: 'info', html: '你可以使用<b>粗体文本</b>, ' + '<a href="//github.com">链接</a> ' + '和其它的HTML标签', showCloseButton: true, showCancelButton: true, confirmButtonText: '<i class="fa fa-thumbs-up"></i> 太棒了!', cancelButtonText: '<i class="fa fa-thumbs-down"></i>' })
带自定义动画的jQuery HTML (Animate.css )
swal({ title: 'jQuery HTML 示例', html: $('<div>') .addClass('some-class') .text('jQuery无处不在。'), animation: false, customClass: 'animated tada' })
警告信息弹窗,“确认”按钮带有一个函数……
swal({ title: '确定删除吗?', text: '你将无法恢复它!', type: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: '确定删除!', }).then(function(){ swal( '删除!', '你的文件已经被删除。', 'success' ); })
…… 给函数传入参数,"取消"按钮也可以执行。
swal({ title: '确定删除吗?', text: '你将无法恢复它!', type: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: '确定删除!', cancelButtonText: '取消删除!', confirmButtonClass: 'btn btn-success', cancelButtonClass: 'btn btn-danger', buttonsStyling: false }).then(function() { swal( '已删除!', '你的文件已经被删除。', 'success' ); }, function(dismiss) { // dismiss的值可以是'cancel', 'overlay', // 'close', 'timer' if (dismiss === 'cancel') { swal( '已取消!', '你的虚拟文件是安全的:)', 'error' ); } })
自定义图标并且禁用动画的信息弹窗
swal({ title: 'Sweet!', text: '自定义图片弹窗', imageUrl: 'https://unsplash.it/400/200', imageWidth: 200, imageHeight: 200, animation: false })
自定义width、padding和background的信息弹窗
swal({ title: '自定义width、padding和background。', width: 600, padding: 100, background: '#fff url(images/tdUzX2P.png)' })
Ajax 请求示例
swal({ title: '提交email来运行ajax请求', input: 'email', showCancelButton: true, confirmButtonText: 'Submit', showLoaderOnConfirm: true, preConfirm: function(email) { return new Promise(function(resolve, reject) { setTimeout(function() { if (email === 'taken@example.com') { reject('该email已存在。'); } else { resolve(); } }, 2000); }); }, allowOutsideClick: false }).then(function(email) { swal({ type: 'success', title: 'Ajax请求完成!', html: '提交的email是:' + email }); })
链式弹窗(队列)示例
swal.setDefaults({ confirmButtonText: '下一个 →', showCancelButton: true, animation: false }); var steps = [ { title: '问题 1', text: 'swal2链式弹窗是简单的' }, '问题 2', '问题 3' ]; swal.queue(steps).then(function() { swal({ title: '完成!', confirmButtonText: '漂亮!', showCancelButton: false }); }).finally(function() { swal.resetDefaults(); })
动态队列示例
swal.queue([{ title: '你的公网IP', confirmButtonText: '显示我的公网IP', text: '你将收到公网IP,' + '通过AJAX请求', showLoaderOnConfirm: true, preConfirm: function () { return new Promise(function (resolve) { $.get('https://api.ipify.org?format=json') .done(function (data) { swal.insertQueueStep(data.ip) resolve() }) }) } }])
$ npm install sweetalert2
或
$ bower install sweetalert2
或从CDN下载:
国外:jsdelivr.com/sweetalert2
|
cdnjs.com/limonte-sweetalert2
国内:limonte-sweetalert2
1. 引用必要的文件初始化插件:
<script src="bower_components/sweetalert2/dist/sweetalert2.min.js"></script> <link rel="stylesheet" href="bower_components/sweetalert2/dist/sweetalert2.min.css"> <!-- Include a polyfill for ES6 Promises (optional) for IE11 and Android browser --> <script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.4.1/core.js"></script>
或
// ES6 Modules import { default as swal } from 'sweetalert2' // CommonJS const swal = require('sweetalert2')
2. 页面加载完成后调用sweetAlert2函数
swal({ title: '错误!', text: '是否继续', type: 'error', confirmButtonText: '酷' })
你可以使用这些参数,通过一个对象传入到sweetAlert2中:
参数 | 默认值 | 描述 |
---|---|---|
title | null | 弹窗HTML标题。可以通过对象的”title”属性或第一个参数进行传递。 |
titleText | null | 弹窗的文本标题,防止HTML注入。 |
text | null | 弹窗的文本描述。可以通过对象的”text”属性或第二个参数进行传递。 |
html | null | 弹窗的HTML描述。如果同时提供了“text”和“html”参数,“text”将被使用。 |
type | null | 弹窗的类型。SweetAlert2有5个内置类型,可以展示相应的图标动画: "warning"、"error"、 "success"、"info"和"question"。可以通过对象的”type”属性或第三个参数进行传递。 |
target | 'body' | 添加弹窗到该容器元素中。 |
input | null | 输入字段类型,可以是 text, email, password, number, tel, range, textarea, select, radio, checkbox, file 和 url. |
width | '500px' | 弹窗宽度,包括paddings(box-sizing:border-box)。单位可以是px或%。 |
padding | 20 | 弹窗的padding |
background | '#fff' | 弹窗的背景(CSS background属性). |
customClass | null | 弹窗的自定义css类 |
timer | null | 定时关闭弹窗的计时器,单位为ms(毫秒)。 |
animation | true | 如果设置为false,弹窗的CSS动画将被禁用。 |
allowOutsideClick | true | 如果设置为false,用户无法通过点击弹窗外部关闭弹窗。 |
allowEscapeKey | true | 如果设置为false,用户无法通过按下Escape键关闭弹窗。 |
allowEnterKey | true | 如果设置为false,用户无法通过按Enter键或空格键确认弹窗,除非手动使确认按钮获得焦点。 |
showConfirmButton | true | 如果设置为false,“确认”按钮将会隐藏。 当你使用自定义HTML描述时时,这可能很有用。 |
showCancelButton | false | 如果设置为true,“取消”按钮将会显示,用户可以点击取消按钮关闭弹窗。 |
confirmButtonText | 'OK' | 使用该参数来修改“确认”按钮的显示文本。 |
cancelButtonText | 'Cancel' | 使用该参数来修改“取消”按钮的显示文本。 |
confirmButtonColor | '#3085d6' | 使用该参数来修改“确认”按钮的背景颜色(必须是十六进制值)。 |
cancelButtonColor | '#aaa' | 使用该参数来修改“取消”按钮的背景颜色(必须是十六进制值)。 |
confirmButtonClass | null | 可以为“确认”按钮设置自定义类 |
cancelButtonClass | null | 可以为“取消”按钮设置自定义类 |
buttonsStyling | true | 默认按钮样式使用swal2的样式,如果你想要使用自己的CSS类(例如Bootstrap类),将该参数设置为false。 |
reverseButtons | false | 如果想要调换默认按钮的位置(将“确认”按钮放到右边),将该参数设置为true |
focusCancel | false | 如果想要在默认情况下“取消”按钮获取焦点,将该参数设置为true |
showCloseButton | false | 设置为true,在弹窗的右上角显示关闭按钮。 |
showLoaderOnConfirm | false | 设置为true会禁用按钮并显示loading,适用于AJAX请求。 |
preConfirm | null | 确认之前执行的函数,应返回Promise,请参考使用案例。 |
imageUrl | null | 为弹窗添加一个自定义图标。这个参数是一个字符串图片路径。 |
imageWidth | null | 如果设置了imageUrl,你可以指定imageWidth来设置图标的宽度,单位为px。 |
imageHeight | null | 设置自定义图标的高度,单位为px。 |
imageClass | null | 设置自定义图标的CSS类 |
inputPlaceholder | '' | 输入框的placeholder |
inputValue | '' | 输入框的初始值。 |
inputOptions | {} or Promise | 如果input参数设置为"select"或"radio",你可以设置该参数。对象key将表示项的值,对象value将表示项的显示文本 |
inputAutoTrim | true | 自动删除字符串首尾两端的空格。设置该参数为false会禁用自动去空格。 |
inputAttributes | {} | 添加到输入框的HTML input元素属性(例如min, max, autocomplete, accept)。对象key将表示属性名称,对象值将表示属性值。 |
inputValidator | null | 输入框的验证器,应返回Promise,请参考使用案例。 |
inputClass | null | 输入框的自定义CSS类。 |
progressSteps | [] | 进度步骤对弹窗队列很有用,请参考使用示例。 |
currentProgressStep | null | 当前激活的进度步骤,默认值是swal.getQueueStep() |
progressStepsDistance | '40px' | 进度步骤之间的距离。 |
onOpen | null | 弹窗打开时运行的函数,弹窗DOM元素作为第一个参数提供给该函数。 |
onClose | null | 弹窗关闭时运行的函数,弹窗DOM元素作为第一个参数提供给该函数。 |
你可以使用swal.setDefaults(customParams)重新定义默认参数。
当用户将弹窗关闭时,swal()返回的Promise将使用带有字符串参数的reject来记录弹窗被退出的原因:
字符串 | 描述 | 相关配置 |
---|---|---|
'overlay' | 用户点击遮罩层。 | allowOutsideClick |
'cancel' | 用户点击取消按钮。 | showCancelButton |
'close' | 用户点击关闭按钮。 | showCloseButton |
'esc' | 用户敲击Esc键。 | allowEscapeKey |
'timer' | 定时自动关闭。 | timer |
如果未处理失败,则将会记录为错误。为了避免这种情况,请在Promise中添加失败处理。
或者你可以使用.catch(swal.noop)作为简单阻止错误的快速方法:
swal(...) .catch(swal.noop)
success | ||
error | ||
warning | ||
info | ||
question |
text |
swal({ title: '随便输入点什么', input: 'text', showCancelButton: true, inputValidator: function (value) { return new Promise(function (resolve, reject) { if (value) { resolve() } else { reject('你需要输入一些东西') } }) } }).then(function (result) { swal({ type: 'success', html: '你输入的是:' + result }) }) |
|
swal({ title: '输入email地址', input: 'email' }).then(function (email) { swal({ type: 'success', html: '输入的email是:' + email }) }) |
||
password |
swal({ title: '输入你的密码', input: 'password', inputAttributes: { 'maxlength': 10, 'autocapitalize': 'off', 'autocorrect': 'off' } }).then(function (password) { if (password) { swal({ type: 'success', html: '输入的密码是:' + password }) } }) |
|
textarea |
swal({ input: 'textarea', showCancelButton: true }).then(function (text) { if (text) { swal(text) } }) |
|
select |
swal({ title: '选择乌克兰', input: 'select', inputOptions: { 'SRB': '塞尔维亚', 'UKR': '乌克兰', 'HRV': '克罗地亚' }, inputPlaceholder: '请选择国家', showCancelButton: true, inputValidator: function (value) { return new Promise(function (resolve, reject) { if (value === 'UKR') { resolve() } else { reject('你需要选择乌克兰:)') } }) } }).then(function (result) { swal({ type: 'success', html: '你的选择是:' + result }) }) |
|
radio |
// inputOptions可以使一个object或者Promise var inputOptions = new Promise(function (resolve) { setTimeout(function () { resolve({ '#ff0000': '红色', '#00ff00': '绿色', '#0000ff': '蓝色' }) }, 2000) }) swal({ title: '选择颜色', input: 'radio', inputOptions: inputOptions, inputValidator: function (result) { return new Promise(function (resolve, reject) { if (result) { resolve() } else { reject('你需要选择一项!') } }) } }).then(function (result) { swal({ type: 'success', html: '你的选择是:' + result }) }) |
|
checkbox |
swal({ title: '条款和条件', input: 'checkbox', inputValue: 1, inputPlaceholder: '我同意条款和条件', confirmButtonText: '继续 <i class="fa fa-arrow-right></i>', inputValidator: function (result) { return new Promise(function (resolve, reject) { if (result) { resolve() } else { reject('你需要同意条款和条件') } }) } }).then(function (result) { swal({ type: 'success', text: '你同意了条款和条件:)' }) }) |
|
file |
swal({ title: '选择图片', input: 'file', inputAttributes: { accept: 'image/*' } }).then(function (file) { var reader = new FileReader reader.onload = function (e) { swal({ imageUrl: e.target.result }) } reader.readAsDataURL(file) }) |
|
range |
swal({ title: '你的年龄?', type: 'question', input: 'range', inputAttributes: { min: 8, max: 120, step: 1 }, inputValue: 25 }) |
不支持多个输入框,您可以通过使用html和preConfirm参数来实现它们。在preConfirm()函数中,您可以将自定义结果传递给preConfirm()函数作为参数:
swal({ title: '多输入', html: '<input id="swal-input1" class="swal2-input">' + '<input id="swal-input2" class="swal2-input">', preConfirm: function () { return new Promise(function (resolve) { resolve([ $('#swal-input1').val(), $('#swal-input2').val() ]) }) }, onOpen: function () { $('#swal-input1').focus() } }).then(function (result) { swal(JSON.stringify(result)) }).catch(swal.noop) |
方法 | 描述 |
---|---|
swal.isVisible() | 判断弹窗是否处于显示状态 |
swal.setDefaults({Object}) | 如果你在使用SweetAlert2时使用了很多相同的配置参数,可以在程序开始时使用setDefaults一次性设置这些相同的参数! |
swal.resetDefaults() | 将配置重置为默认值。 |
swal.close() or swal.closeModal() | 以编程方式关闭当前打开的SweetAlert2弹窗。 |
swal.enableButtons() | 启用“Confirm(确认)”和“Cancel(取消)”按钮。 |
swal.getTitle() | 获取弹窗标题。 |
swal.getContent() | 获取弹窗内容。 |
swal.getImage() | 获取图片。 |
swal.getConfirmButton() | 获取“Confirm(确认)”按钮。 |
swal.getCancelButton() | 获取“Cancel(取消)”按钮。 |
swal.disableButtons() | 禁用“Confirm(确认)”和“Cancel(取消)”按钮。 |
swal.enableConfirmButton() | 只启用“Confirm(确认)”按钮。 |
swal.disableConfirmButton() | 只禁用“Confirm(确认)”按钮。 |
swal.showLoading() or swal.enableLoading() | 禁用按钮并显示加载。这对ajax请求很有用。 |
swal.hideLoading() or swal.disableLoading() | 启用按钮并且隐藏加载。 |
swal.clickConfirm() | 以编程方式点击“Confirm(确认)”按钮。 |
swal.clickCancel() | 以编程方式点击“Cancel(取消)”按钮。 |
swal.showValidationError(error) | 显示验证错误信息。 |
swal.resetValidationError() | 隐藏验证错误信息。 |
swal.getInput() | 获取input DOM节点,此方法与input参数一起使用。 |
swal.disableInput() | 禁用输入。禁用的input元素是不可用的和不可点击的。 |
swal.enableInput() | 启用输入。 |
swal.queue([Array]) | 提供一组SweetAlert2参数以显示多个弹窗,一个接着一个显示。请参考使用案例。 |
swal.getQueueStep() | 获取队列中当前弹窗的索引。当没有激活的队列时将返回null。 |
swal.insertQueueStep() | 向队列中插入一个弹窗,你可以使用第二参数指定弹窗的位置。默认弹窗将会添加到队列的末尾。 |
swal.deleteQueueStep(index) | 从队列中删除索引值的弹窗。 |
swal.getProgressSteps() | 获取进度步骤 |
swal.setProgressSteps([]) | 设置进度步骤 |
swal.showProgressSteps() | 显示进度步骤 |
swal.hideProgressSteps() | 隐藏进度步骤 |
如果你想要添加新特性,欢迎你在GitHub上fork SweetAlert2项目!
本站点翻译自SweetAlert2