跳转到内容

轻提示 toast

反馈与浮层组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

单独一条通知:title 与 description 没写插槽内容时由 props 兜底;duration 给 0 即不自动消失

草稿已保存
内容已同步到云端

语气

type 落成 data-type,皮肤据此换色条;error 走 alert + assertive,loading 表示事情还没完、不自动消失

草稿已保存
内容已同步到云端
发布成功
文档已对所有人可见
配额即将用尽
本月还剩 8% 额度
同步失败
网络中断,稍后自动重试
正在上传
已完成 42%

计时与暂停

duration 走完自动退场;指针停在卡片上或焦点进到卡片里都会把计时按住,离开才接着走剩下那一段

6 秒后自动收走
把鼠标停在这张卡片上,计时会被按住
状态:visible · 计时在走

操作按钮

action-trigger 按下时先发 action 事件,再让这条进入退场;closable 决定还要不要那颗叉

已删除 1 个文件
30 秒内可以撤销
(还没点)

图标与自定义排版

卡片里排什么由作者定:图标与标题排成一行,标题、描述两个部件都接受插槽内容

发布成功
文档已对所有人可见
配额即将用尽
本月还剩 8% 额度
同步失败
网络中断,稍后自动重试

产物

自定义元素<xh-toast>
Vue 组件XhToastActionTrigger XhToastCloseTrigger XhToastDescription XhToastRoot XhToastTitle
组合式函数useToast
状态机toastMachine
皮肤@xihan-ui/styles/toast.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="toast"root · title · description · action-trigger · close-trigger

Props

属性类型必填说明
idstring队列身份。toaster 用它做 create/update/dismiss 的寻址键。
titlestring标题文本;作者没在 title 部件里写内容时由适配器填入。
descriptionstring补充说明;作者没在 description 部件里写内容时由适配器填入。
typeToastType语气,默认 info。error 走 alert + assertive,loading 不自动消失。
durationnumber停留毫秒,默认 5000。<=0 或非有限数即不自动消失。
removeDelaynumber退场窗口毫秒,默认 200:进入 dismissing 后停留这么久再转 unmounted,留给退场动画。
closableboolean是否显示可用的关闭按钮,默认 true。
pauseOnPageIdleboolean页面切到后台时暂停计时,默认 false。由 toaster 统一下发。
translationsPartial<ToastTranslations>
onStatusChange(details: ToastStatusChangeDetails) => void生命周期落位时通知:dismissing 与 unmounted 各一次。宿主据此把条目移出队列。
onAction(details: ToastActionDetails) => void操作按钮被按下。

状态机

状态visible · visible.running · visible.paused · dismissing · unmounted

事件TOAST.DISMISS · TOAST.ACTION · TOAST.PAUSE · TOAST.RESUME · TOAST.RESET · after.duration · after.removeDelay

判据isLastPauseSource

connect API

useToast 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
idstring
statusToastStatus
typeToastType
titlestring | undefined
descriptionstring | undefined
pausedboolean计时被按住中。样式层据此暂停进度条动画。
closableboolean
remainingnumber剩余毫秒;不自动消失时为 Infinity。
dismiss() => void
pause() => void
resume() => void
getRootProps() => T['element']
getTitleProps() => T['element']
getDescriptionProps() => T['element']
getActionTriggerProps() => T['button']
getCloseTriggerProps() => T['button']

键盘

规格出处:W3C APG

按键生效条件行为
Enter / Spacefocus 在 close-trigger 上且 closable立即进入 dismissing,走完 removeDelay 后转 unmounted
Enter / Spacefocus 在 action-trigger 上触发 onAction 并进入 dismissing

Released under The MIT License