MetonaToast

轻量 · 零依赖 · 精致美观的 Toast 通知库

📦 <10KB gzip🎨 80+ 图标🎭 11 动画🌍 国际化🔌 插件

📦 安装与引用

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?)确认对话框 → booleanawait MeToast.confirm('删除?')
prompt(msg, opts?)输入对话框 → stringawait 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?)关闭 toastMeToast.dismiss()