跳转到内容

头像 avatar

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

示例

基础用法

图片加载失败或未提供时落到 fallback

XH

加载失败回退

图片地址取不到时切到 fallback,切换由状态机决定而不是 CSS

回退无图

排成一列

头像本身不管布局,叠放与间距由外层容器决定

XH

尺寸

size 三档只换直径,回退字的字号跟着一起缩放;缺省档不输出 data-size

sm / 缺省 / lg
XHXHXH回退字随档位缩放

形状

圆角是一个组件令牌,整圆、圆角方、直角都是同一个槽位换值;图片的圆角从根继承,不用另设

整圆(缺省)/ 圆角方 / 直角
XHXHXH

图标当回退

fallback 是普通插槽,放图标和放缩写字一样;没有名字可写时用图标表示「某位用户」

图元跟着档位一起换,取的是根流下来的前景色

自定义直径与配色

三档之外的直径、底色、字色各是一个组件令牌;按人名分配颜色就是逐个实例覆盖

曦寒直径 56px
XH底色与字色逐个给

加载状态

status-change 在状态落位时通知,过渡态 idle 不通知;没给地址等同于取不到,直接落 error 让回退接管

地址有效 → 等待中
回退地址取不到 → 等待中
无图没给地址 → 等待中

成组与溢出计数

组内共用的直径、字号、形状在容器上写一次,自定义属性沿继承流给每一枚;超出上限的收成一枚「+N」,它只是又一枚落回退态的头像

+2
+2

挂状态点与角标

根自己就是定位上下文,角标直接写进默认插槽;要挂到圆外就把根的裁剪打开,图片的圆角取自自身,不靠根裁

12 XH

产物

自定义元素<xh-avatar>
Vue 组件XhAvatarFallback XhAvatarImage XhAvatarRoot
组合式函数useAvatar
状态机无,connect 直接由 props 算属性
皮肤@xihan-ui/styles/avatar.css

解剖

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

data-scope="avatar"root · image · fallback

Props

属性类型必填说明
srcstring
altstring
sizeSize尺寸:sm / md / lg,缺省 md;缺省档不输出 data-size
onStatusChange(details: AvatarStatusChangeDetails) => void状态落位时通知,过渡态 idle 不通知。

状态机

事件SRC.CHANGE · IMAGE.LOAD · IMAGE.ERROR

判据hasSrc

connect API

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

成员类型说明
statusAvatarStatus
loadedboolean
getRootProps() => T['element']
getImageProps() => T['img']
getFallbackProps() => T['element']

键盘

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

Released under The MIT License