当前位置:首页 > VUE

vue实现头像组件

2026-01-17 08:43:52VUE

vue实现头像组件

Vue 头像组件实现

基础实现

创建一个可复用的头像组件,支持图片链接或文字缩写显示:

vue实现头像组件

<template>
  <div class="avatar" :style="avatarStyle">
    <img v-if="src" :src="src" :alt="alt" @error="handleError">
    <span v-else class="avatar-text">{{ text }}</span>
  </div>
</template>

<script>
export default {
  props: {
    src: {
      type: String,
      default: ''
    },
    alt: {
      type: String,
      default: ''
    },
    size: {
      type: Number,
      default: 40
    },
    text: {
      type: String,
      default: ''
    },
    bgColor: {
      type: String,
      default: '#ccc'
    },
    textColor: {
      type: String,
      default: '#fff'
    }
  },
  data() {
    return {
      imageError: false
    }
  },
  computed: {
    avatarStyle() {
      return {
        width: `${this.size}px`,
        height: `${this.size}px`,
        lineHeight: `${this.size}px`,
        backgroundColor: this.bgColor,
        color: this.textColor
      }
    }
  },
  methods: {
    handleError() {
      this.imageError = true
    }
  }
}
</script>

<style scoped>
.avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  overflow: hidden;
  font-weight: bold;
  text-transform: uppercase;
}

.avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.avatar-text {
  font-size: calc(40% + 1vw);
}
</style>

高级功能扩展

添加更多功能如形状选择、状态指示和悬停效果:

<template>
  <div 
    class="avatar-wrapper"
    :class="[shape, { 'has-status': status }]"
    :style="{ '--status-color': statusColor }"
  >
    <div class="avatar" :style="avatarStyle">
      <img v-if="src && !imageError" :src="src" :alt="alt" @error="handleError">
      <span v-else class="avatar-text">{{ text }}</span>
    </div>
    <div v-if="status" class="status-indicator"></div>
  </div>
</template>

<script>
export default {
  props: {
    shape: {
      type: String,
      default: 'circle',
      validator: value => ['circle', 'square', 'rounded'].includes(value)
    },
    status: {
      type: Boolean,
      default: false
    },
    statusColor: {
      type: String,
      default: '#4CAF50'
    },
    // 保留基础props
  },
  // 保留基础data, computed, methods
}
</script>

<style scoped>
.avatar-wrapper {
  position: relative;
  display: inline-block;
}

.avatar-wrapper.circle .avatar {
  border-radius: 50%;
}

.avatar-wrapper.square .avatar {
  border-radius: 0;
}

.avatar-wrapper.rounded .avatar {
  border-radius: 20%;
}

.status-indicator {
  position: absolute;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background-color: var(--status-color);
  bottom: 0;
  right: 0;
  border: 2px solid white;
}

.avatar:hover {
  opacity: 0.9;
  transform: scale(1.05);
  transition: all 0.3s ease;
}
</style>

使用示例

<template>
  <div>
    <!-- 基础用法 -->
    <Avatar src="https://example.com/avatar.jpg" alt="用户头像" />

    <!-- 文字缩写 -->
    <Avatar text="VU" size="60" bgColor="#2196F3" />

    <!-- 高级用法 -->
    <Avatar 
      src="https://example.com/avatar.jpg" 
      shape="rounded" 
      size="80" 
      status 
      statusColor="#FF5722"
    />
  </div>
</template>

<script>
import Avatar from './components/Avatar.vue'

export default {
  components: {
    Avatar
  }
}
</script>

功能总结

  • 支持图片显示和加载失败处理
  • 支持文字缩写显示
  • 可自定义大小、背景色、文字颜色
  • 可选圆形、方形或圆角形状
  • 可添加状态指示器
  • 支持悬停动画效果
  • 完全响应式设计

组件可根据实际需求进一步扩展,如添加上传功能、多尺寸响应式处理或与后端API集成等功能。

标签: 组件头像
分享给朋友:

相关文章

vue实现组件

vue实现组件

Vue 实现组件的方法 Vue 中实现组件可以通过多种方式,包括全局注册、局部注册、单文件组件(SFC)等。以下是常见的实现方法。 全局注册组件 全局注册的组件可以在任何 Vue 实例或组件中使用。…

vue 实现组件刷新

vue 实现组件刷新

组件局部刷新 在Vue中实现组件刷新可以通过强制重新渲染组件来实现。常用的方法有以下几种: 使用v-if指令 通过切换v-if条件触发组件的销毁和重建 <template> <…

vue组件实现vmodel

vue组件实现vmodel

Vue 组件实现 v-model 在 Vue 中,v-model 是双向数据绑定的语法糖,默认情况下绑定 value 属性并监听 input 事件。在自定义组件中实现 v-model 需要正确配置 p…

vue 实现弹窗组件

vue 实现弹窗组件

Vue 弹窗组件实现 基础弹窗组件结构 创建一个名为Modal.vue的文件,定义弹窗的基础结构和样式: <template> <div class="modal-mask"…

vue实现高阶组件

vue实现高阶组件

Vue 高阶组件实现方法 高阶组件(HOC)是一种复用组件逻辑的模式,通过函数包裹组件并返回新组件实现。Vue 中可通过以下方式实现: 使用 render 函数 通过函数接收组件选项并返回新组件选项…