Toast 提示
在屏幕一角堆叠显示的短暂通知
用法
基础
挂载一个 TxToastHost,再调用 toast();悬停这摞通知会展开并暂停所有倒计时。
示例加载中...
后台反馈中心
Toast 负责短反馈,TxTooltip 解释动作,TxLoadingOverlay 阻断局部刷新,TxSpinner 承担行内等待。
示例加载中...
最佳实践
- 只在应用根部附近挂一个 host,用
position控制方位;多余的 host 不会绘制,但仍有一个容器和一条开发告警。 - 任务、保存、同步、重试类通知用稳定的
id,让重复的状态更新替换上一条。 - 常驻状态用稳定
id加duration: 0;离开所属页面或任务结束时清理。 - 描述保持简短;长进度、带恢复动作的错误或表单放到面板、抽屉或页面。
- 关键失败与长任务另配常驻可见的文案或页面状态。
API 参考
TxToastHost 属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
position | 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right' | 'bottom-right' | 这摞通知从哪个角或哪条边的中间长出。 |
visibleToasts | number | 3 | 同时可见的条数;其余透明排队,等前面的离场再补位。 |
expand | boolean | false | 常驻展开,指针离开也不收拢。 |
gap | number | 14 | 通知间距(px),也是收拢时露出的边。 |
offset | number | 16 | 与视口边缘的距离。 |
swipeToDismiss | boolean | true | 允许把通知朝它所靠的边甩出去。 |
toast(options)
从 @talex-touch/tuffex/utils 导入:
toast({
id?: string
title?: string
description?: string
variant?: 'default' | 'info' | 'success' | 'warning' | 'danger'
duration?: number // 默认 2600,0 = 不自动关闭
action?: {
label: string
onClick?: (id: string) => void
dismiss?: boolean // 默认 true —— onClick 执行完就关掉这条
}
}): string
dismissToast / clearToasts
import { clearToasts, dismissToast, toast } from '@talex-touch/tuffex/utils'
const id = toast({ title: '已排队', duration: 0 })
dismissToast(id)
clearToasts()
pauseToasts / resumeToasts / toastsPaused
TxToastHost 在指针或焦点进入时自行调用;只在需要另外按住这摞通知时(如对话框盖在上面)手动调用。
import { pauseToasts, resumeToasts, toastsPaused } from '@talex-touch/tuffex/utils'
pauseToasts() // 所有倒计时就地冻结;可重复调用
toastsPaused() // => true
resumeToasts() // 每条从剩下的时间继续,而不是重新从头计时
概述
- Host teleport 到
body,是带aria-label="Notifications"的role="region"与 polite live region;danger升级为role="alert",每条都有名为Dismiss notification的关闭按钮。 toast()返回 id;相同id替换现有 toast 并按新的duration重新计时;duration: 0一直显示,直到dismissToast(id)或clearToasts()。- 最新一条在最前,后面每条后退
gap像素并缩小 5%;收拢时只有最前一条接收指针,host 的空白处可以点穿。 - 指针或键盘焦点进入时展开并调用
pauseToasts(),离开时收拢并调用resumeToasts()。 - 朝所靠的边拖动超过 45px 即关闭,甩动速度超过 0.32px/ms 时 12px 即可;反向拖动只移动五分之一并回弹,从按钮开始的拖动让给按钮。
- 只有第一个挂载的 host 绘制,之后的 host 只渲染空容器以保证 hydrate,并在开发构建下告警;持有者卸载后由下一个接手,通知在挂载后的下一个 tick 出现。
技术实现
- 通知沿所在位置的轴向进出(0.4s),减少动态效果时只变透明度;每次调用都经共享 z-index manager 提升 host 层级。
- 工具函数在
packages/tuffex/packages/utils/toast.ts,单 host 认领在src/toast/src/host-registry.ts。 - 源码:
packages/tuffex/packages/components/src/toast/。
查看源码
packages/tuffex/packages/components/src/toast/index.ts