API 文档
MetonaToast v2.0.0 完整 API 参考。所有基础通知方法(show/success/error/warning/info/loading)支持两种调用形式,均可传入任何 配置项 作为可选第二参数。
show(message, opts?)
显示默认类型的 Toast 通知,无特定颜色和图标。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | object | — | 消息字符串,或包含 title/message 等属性的配置对象 |
| opts | object | {} | 可选配置对象,覆盖 全部配置项。仅当 message 为字符串时有效 |
// 字符串形式
MeToast.show('默认消息');
MeToast.show('自定义', { duration: 2000, position: 'bottom-center' });
// 对象形式(所有 opts 作为一级属性)
MeToast.show({ title: '标题', message: '内容', duration: 3000 });
success(message, opts?)
显示成功通知。绿色对勾图标 #10b981,type = success。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | object | — | 消息字符串或配置对象 |
| opts | object | {} | 可选配置覆盖。type 固定为 success |
MeToast.success('保存成功!');
MeToast.success({ title: '已保存', message: '数据已同步' });
Met.success('MeToast和Met等价');
error(message, opts?)
显示错误通知。红色叉号图标 #ef4444,type = error。aria-live 设为 assertive。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | object | — | 消息字符串或配置对象 |
| opts | object | {} | 可选配置覆盖。type 固定为 error |
MeToast.error('网络错误,请重试');
MeToast.error({ title: '提交失败', message: '服务器不可达' });
warning(message, opts?)
显示警告通知。黄色三角图标 #f59e0b,type = warning。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | object | — | 消息字符串或配置对象 |
| opts | object | {} | 可选配置覆盖。type 固定为 warning |
MeToast.warning('请注意检查输入内容');
info(message, opts?)
显示信息通知。蓝色圆形图标 #3b82f6,type = info。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | object | — | 消息字符串或配置对象 |
| opts | object | {} | 可选配置覆盖。type 固定为 info |
MeToast.info('系统将于 22:00 维护');
loading(message, opts?)
显示加载状态。type = loading,duration 强制为 0(不自动关闭),closeButton 和 showProgress 强制为 false。返回 LoadingControl 对象。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | object | — | 加载提示文本或配置对象 |
| opts | object | {} | 可选配置覆盖 |
const loading = MeToast.loading('正在提交...');
setTimeout(() => loading.success('提交成功!'), 2000);
返回 LoadingControl
| 方法 | 签名 | 说明 |
| success | (msg, opts?) => ToastInstance | 关闭加载 toast,原地替换为 success 类型 |
| error | (msg, opts?) => ToastInstance | 替换为 error 类型 |
| info | (msg, opts?) => ToastInstance | 替换为 info 类型 |
| warning | (msg, opts?) => ToastInstance | 替换为 warning 类型 |
| update | (partial) => MeToast | 不关闭加载 toast,原地更新其内容(支持 resetTimerOnUpdate) |
| dismiss | () | 直接关闭加载 toast 不替换 |
promise(promise, opts)
监听 Promise 生命周期。自动显示 loading → 根据 resolve/reject 自动切换 success/error。返回原 Promise,支持 await 获取结果。
| 参数 | 类型 | 默认值 | 说明 |
| promise | Promise | — | 要监听的 Promise 对象。非 Promise 会打印错误并返回 rejected Promise |
| opts.loading | string | "加载中..." | 加载中显示的文本 |
| opts.success | string | "操作成功" | resolve 后显示的文本 |
| opts.error | string | "操作失败" | reject 后显示的文本 |
try {
await MeToast.promise(fetch('/api/data'), {
loading: '加载中...',
success: '加载完成!',
error: '加载失败',
});
} catch (e) { /* promise reject 会继续抛出 */ }
confirm(message, opts?)
确认对话框。返回 Promise<boolean>。内置 10 秒安全超时,超时自动 resolve(false)。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | — | 对话框消息。非字符串会打印错误并 resolve(false) |
| opts.confirmText | string | "确认" | 确认按钮文字 |
| opts.confirmColor | string | "#10b981" | 确认按钮背景色 |
| opts.cancelText | string | "取消" | 取消按钮文字 |
| opts.cancelColor | string | "#6b7280" | 取消按钮背景色 |
| opts.type | string | "warning" | Toast 类型(影响图标和颜色) |
const ok = await MeToast.confirm('确定删除?', {
confirmText: '删除',
confirmColor: '#ef4444',
cancelText: '保留',
});
if (ok) MeToast.success('已删除');
prompt(message, opts?)
输入对话框。返回 Promise<string|null>。按 Enter 或点击提交按钮返回输入值,取消返回 null。内置 10 秒安全超时。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | — | 对话框消息。非字符串会打印错误并 resolve(null) |
| opts.placeholder | string | "" | 输入框占位文字 |
| opts.defaultValue | string | "" | 输入框默认值 |
| opts.inputType | string | "text" | input 标签 type 属性(如 password/email/number) |
| opts.submitText | string | "确认" | 提交按钮文字 |
| opts.submitColor | string | "#3b82f6" | 提交按钮背景色 |
| opts.cancelText | string | "取消" | 取消按钮文字 |
| opts.cancelColor | string | "#6b7280" | 取消按钮背景色 |
| opts.type | string | "info" | Toast 类型 |
const name = await MeToast.prompt('请输入姓名', {
placeholder: '请输入...',
defaultValue: '张三',
submitText: '确定',
});
if (name) MeToast.info('你好,' + name);
progress(message, opts?)
进度条通知。不自动关闭。返回 ProgressControl 对象以手动更新进度。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | object | — | 进度提示文本或配置对象 |
| opts | object | {} | 可选配置。type 默认 info |
| opts.progressColor | string | "#3b82f6" | 进度条填充颜色 |
const p = MeToast.progress('上传中...', { progressColor: '#10b981' });
p.setProgress(45); // → 45%
p.setProgress(90); // → 90%
p.complete('上传完成!'); // → 100% → success
// 或
p.error('上传失败');
p.dismiss();
返回 ProgressControl
| 方法 | 签名 | 说明 |
| setProgress | (percent: number) | 设置进度 0~100,自动 clamp。更新进度条宽度和百分比文字 |
| complete | (message?: string) | 跳到 100%,300ms 后替换为 success toast,1s 后自动关闭 |
| error | (message?: string) | 替换为 error toast,2s 后自动关闭 |
| dismiss | () | 直接关闭 |
countdown(message, seconds, opts?)
倒计时 Toast。{seconds} 占位符每秒自动替换为剩余秒数。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | — | 消息文本。支持 {seconds} 占位符。非字符串打印错误并返回空控制对象 |
| seconds | number | 10 | 倒计时秒数,最小 1 |
| opts.onComplete | function | — | 倒计时归零时的回调 |
| opts.type | string | "warning" | Toast 类型 |
MeToast.countdown('{seconds} 秒后执行', 5, {
onComplete: () => MeToast.success('已执行'),
});
返回 CountdownControl
| 方法 | 说明 |
| cancel() | 清除计时器并关闭 toast |
| pause() | 暂停倒计时 |
| resume() | 恢复倒计时 |
queue(messages, opts?)
顺序逐个显示消息队列。前一条关闭后延时显示下一条。返回 QueueControl(thenable + cancel)。
| 参数 | 类型 | 默认值 | 说明 |
| messages | Array<string|object> | — | 消息数组。可为字符串或带 message/type/duration/onClose 的对象。非数组打印错误并返回空控制对象 |
| opts.delay | number | 1000 | 每条消息关闭后到显示下一条的间隔(ms) |
| opts.duration | number | 3000 | 每条消息显示时长(ms),可被消息级 duration 覆盖 |
| opts.onClose | function | — | 全部队列完成后的回调。消息级 onClose 和队列级 onClose 都会依次调用 |
| opts.type | string | — | 默认类型 |
const q = MeToast.queue([
'步骤一',
{ message: '步骤二', duration: 5000, type: 'warning' },
'步骤三',
], { delay: 800, duration: 2000, type: 'info' });
q.cancel(); // 中途取消
await q; // 等待完成(thenable 支持 await)
返回 QueueControl (thenable)
| 方法 | 说明 |
| .then(fn, rj) | Promise.then 代理,支持 await |
| .catch(rj) | Promise.catch 代理 |
| .cancel() | 设置取消标志,不再显示下一条消息 |
stack(messages, opts?)
同时错峰显示多条消息。每条间隔 stagger 毫秒依次出现,全部叠加在屏幕上。
| 参数 | 类型 | 默认值 | 说明 |
| messages | Array<string|object> | — | 消息数组。可为字符串或带 message/type/duration 的对象。非数组打印错误 |
| opts.stagger | number | 100 | 每条消息之间的显示间隔(ms) |
| opts.type | string | — | 默认类型 |
MeToast.stack(['消息1', '消息2', { message: '警告', type: 'warning' }], {
stagger: 150,
type: 'info',
});
action(message, actions, opts?) v2.0
Action Toast:内嵌操作按钮。默认 duration=0 不自动关闭,closeButton=true。
| 参数 | 类型 | 默认值 | 说明 |
| message | string | object | — | 消息字符串或配置对象 |
| actions | ActionButton[] | [] | 按钮数组。每个按钮可配 text/onClick/color/style/close |
| opts | object | {} | 可选配置。duration 默认 0,closeButton 默认 true |
| ActionButton 字段 | 类型 | 默认值 | 说明 |
| text | string | —(必填) | 按钮显示文字 |
| onClick | (toast) => void | —(必填) | 点击回调函数,参数为当前 toast 实例 |
| color | string | "#6366f1" | 按钮背景色 |
| style | object | {} | 按钮内联样式,可覆盖 color(style.background 优先) |
| close | boolean | true | 点击后是否自动关闭 toast。设为 false 可多次点击 |
MeToast.action('文件已删除', [
{ text: '撤销', onClick: () => restore(), color: '#3b82f6' },
{ text: '查看详情', onClick: (t) => openFile(), color: '#10b981', close: false },
]);
group(name) v2.0
创建 Toast 分组,返回 GroupAPI 对象。该对象所有方法自动传入 group: name,按组管理。
| 参数 | 类型 | 说明 |
| name | string | 分组名称。GroupAPI 和 dismissGroup 通过此名称关联 |
const orders = MeToast.group('orders');
orders.success('订单已创建');
orders.error('支付失败', { duration: 5000 });
orders.count(); // 该组当前 toast 数量
orders.dismiss(); // 关闭该组全部 toast
// 也支持主对象关闭
MeToast.dismissGroup('orders');
返回 GroupAPI
| 方法 | 说明 |
| show(msg, opts?) | 等价 MeToast.show,自动注入 group |
| success(msg, opts?) | 等价 MeToast.success |
| error(msg, opts?) | 等价 MeToast.error |
| warning(msg, opts?) | 等价 MeToast.warning |
| info(msg, opts?) | 等价 MeToast.info |
| loading(msg, opts?) | 等价 MeToast.loading |
| action(msg, actions, opts?) | 等价 MeToast.action |
| dismiss() | 关闭该组所有 toast |
| count() | 返回该组当前 toast 数量 |
dismiss(id?)
关闭 Toast。无参数则关闭全部。
| 参数 | 类型 | 说明 |
| id | string | 可选。Toast 的 id,不传则关闭所有 |
MeToast.dismiss(); // 关闭所有
MeToast.dismiss(toast.id); // 关闭指定
clear(position?)
按位置清除 Toast。不传参数清除所有位置。
| 参数 | 类型 | 说明 |
| position | string | 可选。位置如 'top-right',不传则清除全部 |
MeToast.clear(); // 全部
MeToast.clear('bottom-right'); // 仅右下角
全局配置,影响后续所有 Toast。theme 和 locale 变化会触发相应副作用(应用主题 CSS / 切换语言)。
| 参数 | 类型 | 说明 |
| opts | object | 包含任意 配置项 的对象 |
MeToast.configure({
position: 'top-right',
duration: 4000,
theme: 'dark',
animation: 'slide',
locale: 'zh-CN',
});
use(plugin)
安装插件。支持字符串(内置预设名)或插件对象。已被拒绝注册的无效插件会打印错误。
| 参数 | 类型 | 说明 |
| plugin | string | object | 预设名 'keyboard'/'persistence'/'accessibility' 或自定义插件对象 { name, version?, install, uninstall? } |
MeToast.use('keyboard'); // ESC 关闭所有 Toast
MeToast.use('persistence'); // 配置自动保存到 localStorage
MeToast.use('accessibility'); // 屏幕阅读器实时朗读 toast 内容
内置插件详情:keyboard 监听 keydown Escape 键;persistence 将配置写入 localStorage 并在页面加载时恢复;accessibility 在 afterShow/afterUpdate 钩子中通过 aria-live 区域朗读 toast 内容。
destroy()
完全销毁。关闭所有 Toast、移除所有 DOM 容器和注入的样式标签、清空内存缓存。
MeToast.destroy();
全部配置项
以下配置可用于 configure()、init() 或单个 Toast 方法的 opts 参数。带 v2.0 标识的为 v2.0 新增。
| 配置项 | 类型 | 默认值 | 说明 |
| position | string | 'top-right' | 位置:top-left / top-center / top-right / bottom-left / bottom-center / bottom-right |
| duration | number | 4000 | 显示时长(ms),0=不自动关闭 |
| max | number | 6 | 同一位置最多同时显示条数,超出则关闭最早的 |
| gap | number | 12 | Toast 之间的间距(px) |
| offset | number | 24 | 容器到屏幕边缘的距离(px) |
| pauseOnHover | boolean | true | 鼠标悬停时暂停 duration 倒计时和进度条 |
| closeOnClick | boolean | true | 点击 Toast 任意位置关闭。关闭按钮始终触发关闭 |
| draggable | boolean | true | 允许拖拽关闭。拖拽超过 120px 触发关闭 |
| showProgress | boolean | true | 显示 duration 倒计时进度条 |
| progressDirection | string | 'horizontal' | 进度条方向:horizontal(底部水平) / vertical(右侧垂直) |
| icon | boolean | true | 显示类型对应图标(success→对勾等) |
| closeButton | boolean | true | 显示右上角关闭 × 按钮 |
| theme | string | 'auto' | 主题:light / dark / auto(跟随系统)/ warm / 自定义注册名 |
| animation | string | 'slide' | 入场动画名称,支持 CSS 动画列表见下 |
| zIndex | number | 9999 | 容器 CSS z-index |
| width | number|string | 360 | Toast 宽度。数字表示 px |
| className | string | '' | 附加到 Toast 元素上的 CSS 类名 |
| style | object | {} | 附加到 Toast 元素上的内联样式对象 |
| locale | string | 'zh-CN' | 语言代码(zh-CN / en-US 等) |
| resetTimerOnUpdate v2.0 | boolean | false | 调用 update() 时重置 duration 倒计时 |
| notifyWhenHidden v2.0 | boolean | false | 页面不可见时自动通过 Notification API 发送系统通知 |
| render v2.0 | function | — | 自定义渲染函数 (toast) => htmlString,完全接管 DOM 构建 |
回调函数
| 回调 | 签名 | 触发时机 |
| onShow | (toast: ToastInstance) => void | Toast DOM 创建并播放入场动画后 |
| onClose | (toast: ToastInstance) => void | Toast DOM 被移除后(离场动画完成时) |
| onClick | (toast: ToastInstance) => void | Toast 被点击时(closeOnClick 为 true 时还会自动关闭) |
| onUpdate v2.0 | (toast: ToastInstance) => void | Toast 内容通过 update() 更新后 |
动画列表
配置 animation 的值,支持以下 CSS 动画。未在此列表中的值将 fallback 到 slide。
| 名称 | 效果 | 时长 |
| slide | 从右侧滑入 + 回弹 | 400ms |
| fade | 纯淡入 + blur→清晰 | 500ms |
| scale | 弹性放大 (0.55→1.07→1) | 450ms |
| bounce | 从天而降四段弹跳 | 650ms |
| flip | 3D 翻转入场 + 回摆 | 500ms |
| rotate | 旋转摇摆进入 | 500ms |
| zoom | 从中心爆发式弹出 | 500ms |
| slideUp | 从下方弹入 | 400ms |
| slideDown | 从上方弹入 | 400ms |
| slideLeft | 从左侧滑入 | 400ms |
| slideRight | 从右侧滑入 | 400ms |
主题参考
// 内置主题
light — 白色玻璃质感
dark — 深色玻璃质感
auto — 跟随系统主题设置
warm — 暖色调
// 注册自定义主题
MeToast.themes.registerTheme('ocean', {
bg: 'rgba(240,249,255,0.96)',
text: '#0c4a6e',
border: 'rgba(14,165,233,0.2)',
shadow: '0 10px 36px -10px rgba(14,165,233,0.18)',
hoverShadow: '0 14px 48px -10px rgba(14,165,233,0.22)',
progressBg: 'rgba(14,165,233,0.1)',
closeHoverBg: 'rgba(14,165,233,0.1)',
});
MeToast.themes.switchTheme('ocean');