vue3仿飞书头像,根据不同名称生成不同的头像背景色

效果展示:

传递三个参数:
  • name:要显示的名称;
  • size:头像的大小;
  • cutNum:分割当前名称的最后几位数;
代码如下:
<template>
	<div
		:style="{
			color: '#fff',
			borderRadius: '50%',
			width: size + 'px',
			height: size + 'px',
			display: 'block',
			textAlign: 'center',
			lineHeight: size + 'px',
			fontSize: size * 0.4 + 'px',
			background: color(name)
		}"
	>
		{{ name.slice(-cutNum) }}
	</div>
</template>

<script lang="ts" setup>
defineProps({
	name: {
		type: String,
		default: ""
	},
	size: {
		type: Number,
		default: 16
	},
	cutNum: {
		type: Number,
		default: 1
	}
});

const color = (name: string) => {
	if (name) {
		let num = "";
		for (let i = 0; i < name.length; i++) {
			num += name[i].charCodeAt(0).toString();
		}
		const r = Math.min(100 + (parseInt(num.slice(0, 2), 10) % 55), 255);
		const g = Math.min(100 + (parseInt(num.slice(2, 4), 10) % 55), 255);
		const b = Math.min(100 + (parseInt(num.slice(4, 6), 10) % 55), 255);
		return `rgb(${r}, ${g}, ${b})`;
	} else {
		return "rgb(125, 125, 125)";
	}
};
</script>
使用代码如下:
<AuthorImage name="铁甲小宝" :size="74" :cut-num="2"></AuthorImage>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
实现仿抖音上传头像的方式可以分为以下几个步骤: 1. 创建一个包含上传组件的 Vue 组件。 2. 在组件中引入 `vue-cropperjs` 插件,用于剪裁图片。 3. 在组件中引入 `axios` 模块,用于上传图片。 4. 在组件中定义一个 `file` 变量,用于存储选择的文件。 5. 在模板中添加一个 `input[type=file]` 元素,用于选择文件。 6. 在选择文件后,将文件赋值给 `file` 变量。 7. 在模板中添加一个按钮,用于触发剪裁图片的操作。 8. 在剪裁完成后,将剪裁后的图片转换为文件格式,并通过 `axios` 模块上传到服务器。 以下是一个示例代码: ``` <template> <div> <input type="file" @change="selectFile"> <button @click="uploadAvatar">上传头像</button> <cropper v-if="file" :src="file" :guides="false" :view-mode="2" @ready="onReady" ref="cropper"></cropper> </div> </template> <script> import axios from 'axios'; import 'cropperjs/dist/cropper.css'; import VueCropper from 'vue-cropperjs'; export default { components: { cropper: VueCropper, }, data() { return { file: null, cropper: null, }; }, methods: { selectFile(e) { this.file = e.target.files[0]; }, onReady() { this.cropper.setAspectRatio(1); }, async uploadAvatar() { const canvas = this.cropper.getCroppedCanvas({ width: 200, height: 200, }); const blob = await new Promise(resolve => { canvas.toBlob(blob => resolve(blob)); }); const formData = new FormData(); formData.append('avatar', blob); await axios.post('/api/avatar', formData); }, }, }; </script> ``` 在这个示例中,我们引入了 `vue-cropperjs` 插件来实现图片剪裁的功能,使用 `axios` 模块来上传图片。在模板中添加了一个 `input[type=file]` 元素和一个上传按钮。在选择文件后,将文件赋值给 `file` 变量。在上传头像的方法中,使用 `getCroppedCanvas` 方法获取剪裁后的画布,并将其转换为文件格式进行上传。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值