当前位置:首页 > 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 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div> &…

vue实现头像剪切

vue实现头像剪切

Vue 实现头像剪切的步骤 使用 vue-cropper 库 vue-cropper 是一个基于 Vue 的图片裁剪组件,支持缩放、旋转、裁剪等功能。 安装依赖: npm install…

uniapp如何将底部导航组件化

uniapp如何将底部导航组件化

在 uniapp 中将底部导航组件化 将底部导航组件化可以提高代码复用性和维护性。以下是具体实现方法: 创建自定义底部导航组件 新建一个组件文件,例如 tab-bar.vue,放置在 compon…

vue实现折叠组件

vue实现折叠组件

实现折叠组件的基本思路 在Vue中实现折叠组件通常需要利用动态绑定和条件渲染。核心是通过控制一个布尔值状态来决定内容是否显示,并添加过渡动画提升用户体验。 基础实现方法 使用v-show或v-if控…

uniapp 滑动组件

uniapp 滑动组件

uniapp 滑动组件实现方法 使用swiper组件 uniapp内置的swiper组件可以实现滑动效果,适用于轮播图或页面切换场景。 示例代码: <swiper :indicator-d…

vue实现tooltips组件

vue实现tooltips组件

实现基础 Tooltip 组件 创建一个名为 Tooltip.vue 的单文件组件,包含模板、样式和逻辑: <template> <div class="tooltip-con…