Skip to content

xtf-avatar

组件说明

xtf-avatar 是头像组件,用于展示用户头像、占位文字或图标。支持图片加载失败自动回退为文字/图标,内置姓名首字母提取、哈希渐变色、状态指示点、光环和发光等丰富视觉效果,适用于通讯录、用户列表、评论区和个人中心等场景。


基础用法

1. 图片头像

通过 src 传入图片地址,size 控制尺寸:

vue
<template>
  <view style="display: flex; gap: 24rpx; align-items: center">
    <xtf-avatar src="https://picsum.photos/200/200?random=1" size="xs" />
    <xtf-avatar src="https://picsum.photos/200/200?random=2" size="sm" />
    <xtf-avatar src="https://picsum.photos/200/200?random=3" size="md" />
    <xtf-avatar src="https://picsum.photos/200/200?random=4" size="lg" />
    <xtf-avatar src="https://picsum.photos/200/200?random=5" size="xl" />
  </view>
</template>

2. 文字头像与姓名提取

不传 src 时,组件根据 nametext 自动提取首字母/汉字作为回退文字,并根据名字哈希生成渐变色:

vue
<template>
  <view style="display: flex; gap: 24rpx; align-items: center">
    <xtf-avatar name="张三" size="lg" />
    <xtf-avatar name="李四" size="lg" />
    <xtf-avatar name="王五" size="lg" />
    <xtf-avatar text="AB" size="lg" />
    <xtf-avatar text="CD" size="lg" />
  </view>
</template>

3. 主题色与自定义颜色

通过 theme 使用预设主题色,或通过 color / gradientEndColor / textColor 自定义渐变与文字颜色:

vue
<template>
  <view style="display: flex; gap: 24rpx; align-items: center">
    <xtf-avatar text="P" size="lg" theme="primary" />
    <xtf-avatar text="S" size="lg" theme="success" />
    <xtf-avatar text="W" size="lg" theme="warning" />
    <xtf-avatar text="D" size="lg" theme="danger" />
    <xtf-avatar text="I" size="lg" theme="info" />
    <xtf-avatar text="C" size="lg" color="#8B5CF6" gradient-end-color="#EC4899" />
  </view>
</template>

4. 形状与状态指示

通过 shape 切换形状(circle / rounded / rect / hexagon / squircle),通过 status 显示在线状态指示点:

vue
<template>
  <view style="display: flex; gap: 24rpx; align-items: center">
    <xtf-avatar
      src="https://picsum.photos/200/200?random=10"
      size="lg"
      shape="circle"
      status="online"
    />
    <xtf-avatar
      src="https://picsum.photos/200/200?random=11"
      size="lg"
      shape="rounded"
      status="busy"
    />
    <xtf-avatar
      src="https://picsum.photos/200/200?random=12"
      size="lg"
      shape="rect"
      status="away"
    />
    <xtf-avatar
      src="https://picsum.photos/200/200?random=13"
      size="lg"
      shape="hexagon"
      status="offline"
    />
    <xtf-avatar src="https://picsum.photos/200/200?random=14" size="lg" shape="squircle" />
  </view>
</template>

5. 光环与发光效果

通过 ring 显示渐变光环边框,通过 glow 添加阴影发光效果,通过 clickable 使头像可点击:

vue
<template>
  <view style="display: flex; gap: 24rpx; align-items: center">
    <xtf-avatar name="张三" size="xl" ring />
    <xtf-avatar name="李四" size="xl" ring ring-color="#8B5CF6" />
    <xtf-avatar name="王五" size="xl" glow />
    <xtf-avatar name="赵六" size="xl" ring glow clickable @click="onClick" />
  </view>
</template>

<script>
export default {
  methods: {
    onClick() {
      uni.showToast({ title: '点击了头像', icon: 'none' })
    }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
srcString''头像图片地址,为空时显示文字/图标回退设置图片头像
nameString''用户名,用于自动提取首字母和哈希渐变色文字头像场景
textString''自定义回退文字,优先级高于 name 的自动提取精确控制回退文案
shapeString'circle'头像形状:'circle' / 'rounded' / 'rect' / 'hexagon' / 'squircle',也兼容 'square' 等同 'rect'适配不同设计风格
sizeString | Number''头像尺寸,支持预设 'xs' / 'sm' / 'md' / 'lg' / 'xl' / 'hero' 或数值(rpx)控制头像大小
themeString''预设主题色:'primary' / 'success' / 'warning' / 'danger' / 'info' / 'secondary' / 'inverse'快速设置渐变色
colorString''自定义渐变起始色,设置后 theme 失效精确控制颜色
gradientEndColorString''自定义渐变结束色,配合 color 使用精确控制渐变
textColorString''自定义回退文字颜色精确控制文字色
statusString''状态指示点:'online' / 'busy' / 'away' / 'offline'展示用户在线状态
ringBooleanfalse是否显示渐变光环边框突出显示头像
ringColorString''自定义光环颜色,默认跟随主题渐变自定义光环色
glowBooleanfalse是否显示发光阴影效果增强视觉层次
clickableBooleanfalse是否可点击,启用后点击有缩放反馈并触发 click 事件头像可交互场景
modeString'aspectFill'图片填充模式,对应 uni-app image 的 mode 属性控制图片裁切方式
objectFitString''图片填充模式别名,优先级高于 mode兼容不同写法
srcSetString''图片 srcset 属性,用于多分辨率适配高清屏适配
fallbackIconString'person'图片加载失败且无文字时的回退图标名自定义回退图标
customClassString''自定义类名样式覆盖
customStyleString | Object''自定义样式动态样式覆盖

预设尺寸对照

预设值实际尺寸
'xs'40rpx
'sm'48rpx
'md'64rpx
'lg'80rpx
'xl'128rpx
'hero'180rpx

事件

事件名称触发时机回调参数参数说明
click点击头像时触发(需 clickabletrue(event)原生点击事件对象
error图片加载失败时触发(src: String)失败的图片地址
load图片加载成功时触发(event)原生 load 事件对象

事件使用示例

vue
<template>
  <xtf-avatar src="/static/avatar.png" clickable @click="onClick" @load="onLoad" @error="onError" />
</template>

<script>
export default {
  methods: {
    onClick(event) {
      console.log('点击头像', event)
    },
    onLoad(event) {
      console.log('头像加载完成', event)
    },
    onError(src) {
      console.log('头像加载失败', src)
    }
  }
}
</script>

主题说明

  • 头像边框使用 var(--xtf-avatar-border)
  • 回退文字字体使用 var(--xtf-font-font-family-title),字重 var(--xtf-font-font-weight-bold)
  • 状态指示点边框色使用 var(--xtf-avatar-status-border)
  • online 状态发光使用 var(--xtf-avatar-status-online-glow)
  • busy 状态脉冲动画使用 var(--xtf-avatar-pulse-start) / var(--xtf-avatar-pulse-end)
  • 光环默认渐变跟随 theme 或哈希色,可通过 ringColor 覆盖
  • 发光阴影使用 var(--xtf-shadow-card)

如需全局调整主题,请在 xtf-config-provider 或主题配置中覆盖上述 CSS 变量。

MIT Licensed