Vue에서 이름 기반 아바타 구성 요소를 구현하는 방법
9108 단어 vue
이러한 구성 요소를 만들 때 다음 사항을 고려해야 합니다.
코드
이 예에서 구성 요소의 이름을 지정했습니다
Avatar.vue
. 따라서 사용 코드는 다음과 같습니다.<!-- This will show the image version -->
<Avatar name="Test User" image="/image.png" />
<!-- This will show the first letter version -->
<Avatar name="Test User" />
아래 코드에서는 css에 변수를 바인딩할 수 있는 Vue 3 기능인 css에서
v-bind()
를 사용하고 있습니다. Vue 2를 사용하는 경우 스타일 바인딩을 대신 사용해야 합니다. 좋아요 <div :style="{ backgroundColor: bgColor }></div>
.Avatar.vue
에 대한 코드는 다음과 같습니다.<template>
<div ref="containerRef" class="avatar">
<img v-if="image" :src="image" class="image" :alt="name" />
<span v-else-if="name" class="initials">
{{ name[0] }}
</span>
</div>
</template>
<script setup>
import { ref, computed, onMounted } from 'vue'
const props = defineProps({
image: {
type: String,
default: ''
},
name: {
type: String,
default: ''
}
})
const containerRef = ref()
const fontSize = ref('1rem')
onMounted(() => {
// The font size should be 50% of the container width
fontSize.value = `${containerRef.value.clientWidth * 0.5}px`
})
const bgColor = computed(() => {
// Don't show a color if the image is provided
if (props.image) {
return 'transparent'
}
// Calculate the hue value based on the name
const hue =
props.name.split('').reduce((acc, cur) => {
return acc + cur.charCodeAt(0)
}, 0) % 360
return `hsla(${hue}, 60%, 50%, 1)`
})
</script>
<style scoped>
.avatar {
width: 100%;
aspect-ratio: 1;
border-radius: 50%;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
/* bind the background color to bgColor */
background: v-bind(bgColor);
}
.image {
width: 100%;
height: 100%;
object-fit: cover;
}
.initials {
/* bind the font-size to fontSize */
font-size: v-bind(fontSize);
color: white;
font-family: sans-serif;
user-select: none;
}
</style>
이 구성 요소에 특정 이름을 전달하면 항상 동일한 배경색을 갖게 됩니다.
bgColor
계산 속성에서 이름에 있는 각 문자의 문자 코드 합계를 기준으로 색상을 계산하기 때문에 이렇게 작동합니다.채도 및 밝기와 같은 다른 구성 요소와 별도로 색상 값을 제어할 수 있도록 색상에
hsla
를 사용하고 있습니다.이 예에서는 글꼴 크기를 컨테이너 너비의 절반으로 설정했습니다. 따라서 더 작게 또는 더 크게 만들고 싶다면
0.5
에서 fontSize.value = ${containerRef.value.clientWidth * 0.5}px
를 변경하면 됩니다.이 기사가 마음에 들면 my blog에서 이와 유사한 기사를 더 확인하십시오.
또한 코딩 팁과 최신 작업을 공유합니다. 우리 친구하자!
Reference
이 문제에 관하여(Vue에서 이름 기반 아바타 구성 요소를 구현하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tahazsh/how-to-implement-name-based-avatar-component-in-vue-44jp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)