AvatarStack
交叠的群组成员簇。
缝隙跟着形状走,不是圆
每个圆盘用邻居自己的剪影作为蒙版从后方抠洞,而不是一个圆。
圆形挖孔只有当前方形状也是圆时才看起来对。对着六边形它会咬进一边、在另一边留下楔形,绕着边缘看缝隙宽度还会变。用真实轮廓能让每一种形状的间隔都均匀。
溢出
超过 maxVisible 的成员收成 +N 芯片。
不用组件,只要算术
三个辅助函数把头像组的数字带到那些并不在渲染它的地方:必须对齐第三张脸的弹出层、布局前就需要宽度的一行、不想碰 DOM 只想验算的测试。
layoutAvatarStack(count, sizePx, { overlap, withOverflow })返回每个圆盘按绘制顺序的左侧offsets、实际使用的overlap,以及总width(预留时包含溢出芯片的位置)。最后一个圆盘贡献整个宽度,前面每个只贡献没被邻居遮住的那部分。stackMetrics(size)给出每个头像尺寸合理的比例——sizePx、overlap、maxVisible。小的组重叠更狠、露的脸更少:在xs下,三个圆盘按常规重叠是一团糊,两个更紧地叠在一起仍然读得出「一群人」,这已经是这个尺寸能承载的全部。participantsFromMembers(members, max)把成员列表拆成要画的visible脸和给芯片用的hidden数量。max默认是STACK_MAX_VISIBLE(3);默认重叠是STACK_OVERLAP(0.36)。
API
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
members* | AgentLike[] | — | — |
className | string | — | — |
face | "cute" | "eyes" | "line" | — | Face style for every member, overriding their identities. |
lineWeight | number | — | Stroke width multiplier for every member. |
maxVisible | number | — | Faces to draw before the "+N" chip. Defaults to the size band's count. |
nose | "slant" | "angular" | "hook" | "long" | "curve" | "bow" | null | — | Nose for every member, overriding their identities. `null` draws none. |
overlap | number | — | How far each disc overlaps the previous one, as a fraction of its size. Defaults to the proportions for the nearest avatar size band. |
showOverflow | boolean | true | Show a "+N" chip when there are more members than fit. |
sizePx | number | 28 | — |
style | CSSProperties | — | — |
GroupAvatar
方便包装,从群组记录上读取 members。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
group* | AgentLike | — | — |
className | string | — | — |
face | "cute" | "eyes" | "line" | — | Face style for every member, overriding their identities. |
lineWeight | number | — | Stroke width multiplier for every member. |
nose | "slant" | "angular" | "hook" | "long" | "curve" | "bow" | null | — | Nose for every member, overriding their identities. `null` draws none. |
sizePx | number | 28 | — |
style | CSSProperties | — | — |