当前位置:首页 > VUE

vue实现头像组件

2026-03-30 01:47:13VUE

Vue 头像组件实现

基础实现

创建一个基本的头像组件,接收图片 URL 作为 prop,并显示默认头像作为备用。

<template>
  <div class="avatar">
    <img
      :src="src || defaultAvatar"
      :alt="alt"
      @error="handleError"
    />
  </div>
</template>

<script>
export default {
  props: {
    src: String,
    alt: {
      type: String,
      default: 'User avatar'
    },
    size: {
      type: Number,
      default: 40
    }
  },
  data() {
    return {
      defaultAvatar: 'path/to/default-avatar.png'
    }
  },
  methods: {
    handleError() {
      this.src = this.defaultAvatar
    }
  }
}
</script>

<style scoped>
.avatar {
  display: inline-block;
  border-radius: 50%;
  overflow: hidden;
}
.avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
</style>

圆形裁剪与尺寸控制

通过计算属性动态设置样式,实现不同尺寸的头像显示。

<script>
export default {
  // ...其他代码
  computed: {
    avatarStyle() {
      return {
        width: `${this.size}px`,
        height: `${this.size}px`,
        lineHeight: `${this.size}px`,
        fontSize: `${this.size / 2}px`
      }
    }
  }
}
</script>

<style scoped>
.avatar {
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background-color: #ccc;
  color: white;
  font-weight: bold;
  text-transform: uppercase;
}
</style>

字母头像功能

当没有图片时,显示用户名字的首字母作为头像。

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

<script>
export default {
  props: {
    name: String,
    // ...其他props
  },
  computed: {
    initials() {
      if (!this.name) return ''
      const parts = this.name.split(' ')
      let initials = parts[0].charAt(0)
      if (parts.length > 1) {
        initials += parts[parts.length - 1].charAt(0)
      }
      return initials
    }
  }
}
</script>

高级功能实现

添加 hover 效果、在线状态指示器等增强功能。

<template>
  <div class="avatar-container">
    <div class="avatar" :style="avatarStyle">
      <!-- 原有头像内容 -->
      <div v-if="online" class="online-indicator"></div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    online: Boolean,
    // ...其他props
  }
}
</script>

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

.online-indicator {
  position: absolute;
  bottom: 0;
  right: 0;
  width: 12px;
  height: 12px;
  background-color: #4CAF50;
  border-radius: 50%;
  border: 2px solid white;
}

.avatar:hover {
  transform: scale(1.05);
  transition: transform 0.2s ease;
}
</style>

组件使用示例

vue实现头像组件

<template>
  <div>
    <Avatar src="user.jpg" alt="John Doe" size="60" />
    <Avatar name="John Doe" size="60" online />
    <Avatar size="40" />
  </div>
</template>

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

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

以上实现涵盖了头像组件的基本功能和常见扩展需求,可以根据实际项目需要进行调整和扩展。

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

相关文章

vue实现头像上传

vue实现头像上传

实现头像上传功能 在Vue中实现头像上传功能通常需要结合文件上传组件和后端接口处理。以下是具体实现步骤: 前端组件实现 创建文件上传组件模板部分: <template> <d…

vue实现广告组件

vue实现广告组件

Vue 实现广告组件的核心方法 数据驱动的广告内容渲染 通过 props 接收广告数据(如图片URL、跳转链接等),使用 v-bind 动态绑定属性。典型结构包含 <a> 标签嵌套 <…

vue实现折叠组件

vue实现折叠组件

Vue 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div> &…

vue实现穿梭框树组件

vue实现穿梭框树组件

Vue 穿梭框树组件实现 穿梭框树组件通常结合了树形结构和穿梭框功能,允许用户在左右两栏之间移动树节点数据。以下是基于 Vue 的实现方案: 核心功能设计 数据结构 树形数据通常采用嵌套结构,例如:…

elementui组件

elementui组件

ElementUI 组件概述 ElementUI 是一套基于 Vue.js 的桌面端组件库,提供丰富的 UI 组件,适用于快速开发中后台系统。以下是其核心组件分类及典型用法。 基础组件 Button…

vue实现递归组件

vue实现递归组件

递归组件的实现方法 在Vue中实现递归组件主要依靠组件调用自身的能力。以下是几种常见的实现方式: 使用组件name属性 通过组件的name属性实现递归调用是最简单的方式: <template…