📦 安装与引用
npm
# 安装 npm install metona-toast # ES Module import MeToast from 'metona-toast'; # CommonJS const MeToast = require('metona-toast');
CDN
<!-- UMD 开发版 --> <script src="https://unpkg.com/metona-toast@2.0.0/dist/metona-toast.js"></script> <!-- 压缩版(生产环境推荐)--> <script src="https://unpkg.com/metona-toast@2.0.0/dist/metona-toast.min.js"></script> <!-- ES Module 直接引用 --> <script type="module"> import MeToast from 'https://unpkg.com/metona-toast@2.0.0/dist/metona-toast.esm.js'; </script>
🎯 基础调用
五种核心类型,一行代码搞定
// 五种类型,一行搞定 MeToast.success('操作成功!'); MeToast.error('操作失败!'); MeToast.warning('请注意检查'); MeToast.info('系统维护中'); MeToast.show('默认消息');
⚙️ 配置选项
标题、位置、时长、主题、动画……灵活可控
// 带标题 MeToast.success({ title: '保存成功', message: '文件已同步到云端' }); // 自定义时长 — 显示10秒 MeToast.info('显示10秒', { duration: 10000 }); // 自定义位置 — 底部居中 MeToast.warning('底部居中', { position: 'bottom-center' }); // 手动关闭 — 不自动消失 MeToast.info('手动关闭', { duration: 0, closeButton: true }); // 自定义动画 — 弹跳效果 MeToast.success('弹跳动画', { animation: 'bounce' });
🔄 Loading 链式转换
加载中 → 成功/失败/警告/信息,优雅切换
// loading → success const loading = MeToast.loading('正在提交...'); setTimeout(() => loading.success('提交成功!'), 2000); // loading → error const loading = MeToast.loading('正在提交...'); setTimeout(() => loading.error('提交失败,请重试'), 2000);
⛓ Promise 封装
一行代码自动处理 loading / success / error
await MeToast.promise( fetch('/api/data'), { loading: '加载中...', success: '加载完成!', error: '加载失败', } );
💬 确认框 & 输入框
内置对话框,返回 Promise
// 确认对话框 → Promise<boolean> const ok = await MeToast.confirm('确定删除吗?', { confirmText: '删除', confirmColor: '#ef4444', }); // 输入对话框 → Promise<string|null> const name = await MeToast.prompt('请输入姓名', { placeholder: '请输入...', });
📊 进度条 & 倒计时
实时更新的进度通知和自动倒计时
// 进度条 — 实时更新 const p = MeToast.progress('上传中...'); let v = 0; const t = setInterval(() => { v += Math.random() * 28; if (v >= 100) { clearInterval(t); p.complete('上传完成!'); } else p.setProgress(v); }, 400); // 倒计时 — {seconds} 自动替换 MeToast.countdown('{seconds} 秒后执行', 5, { onComplete: () => MeToast.success('已执行'), });
📋 队列 & 堆叠
顺序逐个展示 or 同时错峰展示
// 队列 — 一个接一个 await MeToast.queue(['步骤一', '步骤二', '步骤三'], { delay: 800, duration: 2000, type: 'info', }); // 堆叠 — 同时错峰 MeToast.stack(['消息 1', '消息 2', '消息 3', '消息 4'], { stagger: 150, type: 'info', });
🔌 插件
3 款预设插件,按需安装
// keyboard — ESC 关闭所有 Toast MeToast.use('keyboard'); // persistence — 配置持久化(自动保存/加载) MeToast.use('persistence'); // accessibility — 屏幕阅读器朗读公告 MeToast.use('accessibility');
🔧 全局配置
一次配置,所有 Toast 自动继承
MeToast.configure({ position: 'top-right', // 默认位置 duration: 4000, // 默认显示时长(ms) max: 6, // 同时最多显示条数 theme: 'auto', // light | dark | auto | warm animation: 'slide', // 默认动画效果 pauseOnHover: true, // 悬停暂停计时 closeOnClick: true, // 点击关闭 showProgress: true, // 显示进度条 draggable: true, // 允许拖拽关闭 locale: 'zh-CN', // 默认语言 });
🎨 主题 & 国际化
内置四种主题,支持自定义注册;内置中英文,可扩展
// 切换主题(switchTheme + configure 同步全局配置) MeToast.themes.switchTheme('warm'); MeToast.configure({ theme: 'warm' }); // 切换语言 — 英文 MeToast.i18n.switchLocale('en-US'); // 切换回中文 MeToast.i18n.switchLocale('zh-CN'); // 注册自定义主题 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)', });
🔧 Toast 管理
查找、关闭、清除、暂停、恢复
MeToast.count(); // 当前数量 MeToast.getToasts(); // 获取所有实例 MeToast.dismiss(); // 关闭全部 MeToast.dismiss(id); // 关闭指定 MeToast.pauseAll(); // 暂停全部计时 MeToast.resumeAll(); // 恢复全部计时 MeToast.destroy(); // 完全销毁
📖 API 速览
| 方法 | 说明 | 示例 |
|---|---|---|
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('加载中...') |
promise(p, opts) | Promise 自动状态 | MeToast.promise(fetch(...), opts) |
confirm(msg, opts?) | 确认对话框 → boolean | await MeToast.confirm('删除?') |
prompt(msg, opts?) | 输入对话框 → string | await MeToast.prompt('姓名?') |
progress(msg, opts?) | 进度条通知 | MeToast.progress('上传中...') |
countdown(msg, s, opts?) | 倒计时 | MeToast.countdown('{seconds}s', 10) |
queue(msgs, opts?) | 队列顺序展示 | MeToast.queue(['a','b','c']) |
stack(msgs, opts?) | 堆叠错峰展示 | MeToast.stack(['a','b','c']) |
configure(opts) | 全局配置 | MeToast.configure({duration:5000}) |
dismiss(id?) | 关闭 toast | MeToast.dismiss() |