Message 消息提示
命令式全局消息提示,支持类型图标、加载态、悬停暂停、倒计时进度条、位置偏移、数量上限、富内容与 promise 链。进出场动画走 transform/opacity,尊重 prefers-reduced-motion。
基础用法
六种类型
类型图标
内置类型自带图标(成功/错误/警告/疑问/信息),可通过 icon 自定义(lookupIcon 查表通道,registerIcon 注册的自定义图标同样可用),show-icon="false" 关闭。
类型图标与自定义
Loading 与异步流
message.loading() 默认不自动关闭(可 update 收尾),配合 message.update(key, options) 组成轻量异步流。
Loading 与异步流
自定义时长与手动关闭
自定义时长
点击消息
点击消息体触发 onClick 回调并关闭消息(oas-close 的 source 为 click);关闭按钮走 close 来源。
点击消息关闭
悬停/焦点暂停
pause-on-hover 默认开启:悬停消息或聚焦关闭按钮时暂停自动关闭计时(剩余时长记账),移开继续;页面隐藏(visibilitychange)同样暂停。
悬停暂停
倒计时进度条
show-progress 开启自动关闭倒计时进度条,动画时长与 duration 同步;悬停暂停时进度条同步暂停。
倒计时进度条
位置与偏移
placement 限 top / bottom 两向(顶部居中为默认,center/角落归 toast 形态);offset 为单数字偏移(px,默认 16)。
位置与偏移
数量上限
max 设置栈上限,超出时丢最旧派(最早的消息先关闭)。
数量上限
富内容
content 支持 string | Node,Node 直接注入文本区渲染(不做 innerHTML 通道)。
富内容
Promise 链
message.promise(promise, { loading, success, error }):loading → 成功切 success / 失败切 error,成功后 3 秒自动关闭。
Promise 链
分组消息与重复计数
相同 group 的消息合并为一条,重复触发递增计数(×n);repeatNum: true 时右上角显示重复计数徽标;不同 group 相互独立。
分组消息
定制杂项
avatar(Node 或 slot="avatar")、spinner 自定义(图标名或 Node)、registerType 自定义类型注册、mask 遮罩(点击遮罩关闭)。
定制杂项
声明式用法
<oas-message> 也支持声明式使用:属性与命令式 options 一一对应,文本走内容区,富内容走 slot="content"。
声明式用法
App 全局默认
<oas-app message='{...}'> 可配置 message 全局默认(调用参数优先):duration / closable / pauseOnHover / placement / offset / max / showProgress / showIcon / mask / repeatNum。
App 全局默认
API
方法
| 方法 | 说明 |
|---|---|
message.info(content, options?) | 信息提示,返回 { close, pause, resume } |
message.success(content, options?) | 成功提示 |
message.warning(content, options?) | 警告提示 |
message.error(content, options?) | 错误提示 |
message.question(content, options?) | 疑问提示(问号图标) |
message.loading(content, options?) | 加载提示(默认不自动关、不可关) |
message.show(type, content, options?) | 通用入口:内置类型或 registerType 注册的自定义类型 |
message.update(key, { content, type?, duration? }) | 更新已存在消息,key 不存在则新建 |
message.destroy(key) | 关闭指定 key 的消息 |
message.promise(promise, { loading, success, error }) | promise 链:loading → success/error |
message.registerType(name, { icon?, color?, closable? }) | 注册自定义消息类型 |
destroyAllMessage() | 清空全部消息 |
oas-message
属性
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
closable | 是否显示关闭按钮(默认 true;loading 态下隐藏) | string | true |
count | 合并计数(>1 时内容后显示 ×n) | string | 0 |
duration | 自动关闭时长(ms),0 表示不自动关闭 | string | 3000 |
group | 分组标识:同组消息合并为一条 | — | — |
icon | 自定义图标(声明式元素用法);覆盖 type 默认图标 | string | — |
key | 唯一标识:供 message.update / message.destroy 定位 | — | — |
mask | 显示页面遮罩;点击遮罩关闭,oas-close detail.source 为 mask | boolean | — |
pause-on-hover | 悬停暂停计时(默认开),移出恢复剩余时长 | string | true |
placement | 声明式元素用法显示位置:top(默认)/ bottom | — | — |
repeat-num | 重复计数徽标:同内容连发时合并显示次数 | string | — |
show-icon | 是否显示类型图标(默认 true;false 纯文字) | string | true |
show-progress | 显示倒计时进度条(时长同步) | boolean | — |
type | 消息类型:info/success/warning/error/loading/question | string | info |
事件
| 事件 | 说明 |
|---|---|
oas-close | 消息关闭时派发(自动关闭/关闭按钮/destroy/点击/遮罩),detail: { key?, source }(source:auto/close/destroy/click/mask) |
插槽
| 名称 | 说明 |
|---|---|
avatar | 头像插槽(消息前置) |
content | 正文富内容插槽 |
CSS 变量
| CSS 变量 | 说明 | 默认值 |
|---|---|---|
--oas-glass-blur | — | none |
--oas-glass-refraction | 液态玻璃边缘折射滤镜(data-glass 生效,默认 none);局部停用覆盖为空值(--oas-glass-refraction: ;)——不得用 none(与 button 态的 brightness() 混排会使整条 filter 声明非法) | none |
--oas-glass-ring | — | transparent |
--oas-message-anim-in | — | 220ms |
--oas-message-anim-out | — | 180ms |
--oas-msg-type-color | — | var(--oas-color-border) |
options
{ duration?, group?, key?, onClose?, closable?, pauseOnHover?, placement?, offset?, max?, icon?, showIcon?, showProgress?, repeatNum?, mask?, onClick?, avatar?, spinner? }content(首参)支持string | Node富内容;group同组合并并递增计数;key供update/destroy定位;onClose关闭回调;onClick点击消息体回调(触发后以click来源关闭)。duration默认3000ms,传0表示不自动关闭;offset默认16px;max超出丢最旧派。- 悬停/聚焦关闭按钮/页面隐藏自动暂停计时(剩余时长记账);
error类型使用role="alert",其余使用role="status"。 - 进出场动画走 transform/opacity(时长 CSS 变量
--oas-message-anim-in/--oas-message-anim-out开口),尊重prefers-reduced-motion。 - 颜色只走 CSS 变量 token;
registerType的color为显式注入的任意 CSS 颜色(组件默认不硬编码色值)。