avatar —— صورة رمزية
يتعين على مكوّن الصورة الرمزية معالجة ثلاثة أشكال للمحتوى: الصورة، والنص، والأيقونة، مع وجوب الانخفاض السلس عند فشل تحميل الصورة أو كان العنوان غير صالح. يحوّل core/avatar «استخراج النص» و«التحقق من مصدر الصورة» إلى دوال صرفة — يجب أن يكون هذان الحكمان متطابقين تمامًا عبر الأطراف، وإلا سيظهر اختلاف «Vue3 يعرض نصًا بينما يعرض uniapp صورة مكسورة».
متى يُستخدم
Section titled “متى يُستخدم”- عندما يُطبّق كل طرف
LhAvatar: يُعرضimgعند توفّر صورة، وإلا الحرف الأول المستخرج عبرgetAvatarText، وإذا لم يوجد أيهما تُعرض أيقونة احتياطية. - سيناريوهات أخذ «الحرف الأول من الاسم» كصورة رمزية افتراضية في أنظمة المستخدمين.
- لا يجب استخدامه: اقتصاص الصور ورفعها. تلك شؤون
LhUploadومنطق العمل.
طريقة الاستيراد
Section titled “طريقة الاستيراد”import { getAvatarClassNames, getAvatarText, isImageSource } from '@lh-ui/share/core/avatar'import type { LhAvatarState, LhAvatarShape } from '@lh-ui/share/core/avatar'نية التصميم
Section titled “نية التصميم”يستخدم getAvatarText الدالتين codePointAt(0) + String.fromCodePoint بدلًا من str[0]، وهذا فخٌّ يسهل تفويته: '😀'[0] يعطي نصف زوج بديل (\uD83D)، ويُعرض كمربع مشوّش. وباستخراج نقطة الرمز يبقى الإيموجي ومحارف المستوى المكمّل (الكثير من المحارف الصينية النادرة) آمنة.
التعبير النمطي في isImageSource يقوم بـحكم قابلية متسامح فقط، لا بتحقق أمني: يُعتبر عنوانًا للصورة أي نص يبدأ بـ http(s):// أو data:image/ أو مسار مطلق / أو مسار نسبي ./ أو ../. الغرض منه «تقرير ما إذا كان يجدر محاولة عرض img»، أما فشل التحميل الفعلي فيتعامل معه حدث error الخاص بـ img (حيث ينتقل الطرف البصري إلى حالة النص).
جدول الدوال
Section titled “جدول الدوال”| الدالة | التوقيع | القيمة المُعادة | الدور |
|---|---|---|---|
getAvatarClassNames |
(state: LhAvatarState) => string[] |
مصفوفة أسماء الأصناف | معدّلات الشكل والحجم |
getAvatarText |
(source: string) => string |
المحرف الأول أو '' |
استخراج محرف العرض من النص |
isImageSource |
(src: string | undefined) => boolean |
قيمة منطقية | هل يستحق عنوان الصورة محاولة العرض |
تفاصيل الحدود:
getAvatarText('')→''؛getAvatarText(' 水墨 ')→'水'(يُقصّ الطرفان أولًا)؛getAvatarText('Alice')→'A'.- يُعيد
getAvatarTextالقيمة''عندما يُعيدcodePointAt(0)القيمة undefined (النص الفارغ مُقصّ بالفعل، فلا يمكن نظريًا أن يحدث ذلك). isImageSource(undefined)→false؛isImageSource('')→false.
تعريف الأنواع
Section titled “تعريف الأنواع”export type LhAvatarShape = 'circle' | 'square'
export interface LhAvatarState { size: LhComponentSize shape: LhAvatarShape}إمكانية الوصول
Section titled “إمكانية الوصول”لا يُخرج core/avatar حزمة سمات aria، لأن معالجة الصورة الرمزية تتوقف على شكل المحتوى:
- صورة رمزية مصوّرة: تُستخدم
<img>الأصلية، وaltإلزامي (مثل «صورة رمزية لجانب»). لا تتركaltفارغًا — فالـ alt الفارغ يعني «صورة زخرفية»، بينما تحمل الصورة الرمزية عادةً معلومات الهوية. - صورة رمزية نصية: النص نفسه محتوى قابل للقراءة، ولا يحتاج إلى معالجة إضافية.
- صورة رمزية أيقونية (عنصر احتياطي للمستخدم المجهول): تمرّ الأيقونة عبر
getIconAria({ decorative: false, label: 'مستخدم مجهول' }).
أمثلة الاستخدام
Section titled “أمثلة الاستخدام”import { getAvatarText, isImageSource } from '@lh-ui/share/core/avatar'
getAvatarText('محمد') // 'م'getAvatarText('Alice Smith') // 'A'getAvatarText('😀هاها') // '😀'isImageSource('https://a.com/1.png') // trueisImageSource('data:image/png;base64,...') // trueisImageSource(undefined) // false<!-- Vue3 --><div :class="getAvatarClassNames({ size, shape })"> <img v-if="isImage && !error" :src="src" :alt="alt" @error="error = true" /> <span v-else-if="text" class="lh-avatar__text">{{ text }}</span> <LhIcon v-else name="user" :decorative="false" label="مستخدم مجهول" /></div>// Reactconst text = getAvatarText(name)const showImg = isImageSource(src) && !imgErrorreturn ( <div className={getAvatarClassNames({ size, shape }).join(' ')}> {showImg ? <img src={src} alt={alt} onError={() => setImgError(true)} /> : text ? <span className="lh-avatar__text">{text}</span> : <LhIcon name="user" decorative={false} label="مستخدم مجهول" />} </div>)// uniapp: يدعم مكوّن <image> الحدث @error، والمنطق كما سبق؛// وانتبه إلى تراجع الخط للصور الرمزية النصية على الأطراف غير h5 (قد تفتقر المحارف النادرة إلى الرسوم)الأنماط والرموز
Section titled “الأنماط والرموز”| اسم الصنف | الدلالة |
|---|---|
.lh-avatar |
الصنف الأساسي: عرض وارتفاع ثابتان، إخفاء التجاوز، توسيط |
.lh-avatar--{mini|small|medium|large|x-large} |
درجات الحجم |
.lh-avatar--circle / .lh-avatar--square |
الشكل (درجة الاستدارة) |
.lh-avatar__img |
الصورة: ملء + object-fit |
.lh-avatar__text |
النص: موسّط، أبيض، مُحجّم وفق الحجم |
.lh-avatar__icon |
أيقونة احتياطية |
لون خلفية الصورة الرمزية هو رمز اللون الأساسي افتراضيًا؛ وفي سيناريوهات الصور المتعددة (مثل مجموعات الصور الرمزية) يمكن لكل طرف بصري تلوينها وفق تجزئة الاسم، ولا يتدخل core في ذلك.
ملاحظات
Section titled “ملاحظات”- لا تستخدم
str[0]أوstr.charAt(0)لاستخراج الحرف الأول في الطرف البصري بنفسك — فالإيموجي والمحارف النادرة ستُقطع وتصبح رموزًا مشوّشة؛ استخدمgetAvatarTextموحّدًا. - لا يعني مجرد إعادة
isImageSourceللقيمة true أن الصورة موجودة، بل يعني فقط «يستحق المحاولة. الاحتفاظ بـonError` أمر لا غنى عنه. squareليس زاوية قائمة، بل استدارة صغيرة (للتناغم البصري)، فالصورة الرمزية بزوايا قائمة تبدو حادة التأثير للغاية.object-fitالافتراضي للصورة الرمزية المصوّرة هوcover، وقد يُقتَلص طرف الوجه — وكثيرًا ما تحتاج الأعمال إلى ضبطobject-position، وهذا يُعالج في الطرف البصري لكل جهة.
@lh-ui/share/core/avatar → getAvatarText( )(填好参数后点运行)Copyright © 2024-2026 FengMo WenXue