Skip to content
API 风格:

هيكل Skeleton ​

يوفر صورًا نائبة قبل اكتمال تحميل المحتوى. كتل العنصر النائب aria-hidden تخفيها عن قارئ الشاشة، وتُعلم الحاوية بتغيّر حالة التحميل عبر aria-busy وaria-live؛ ويحترم تأثير التدفق prefers-reduced-motion.

الاستخدام الأساسي ​

الاستخدام الأساسي
vue
<script setup lang="ts">
import { ref } from 'vue'

const skeletonLoading = ref(true)
</script>

<template>
  <!-- الاستخدام الأساسي -->
  <LhSkeleton :rows="3" :loading="skeletonLoading">
    <p>اكتمل تحميل المحتوى: طارت كل الطيور عالية، وانصرفت الغيمة الوحيدة ساكنة.</p>
  </LhSkeleton>
  <!-- تبديل حالة التحميل -->
  <LhButton size="small" @click="skeletonLoading = !skeletonLoading">
    {{ skeletonLoading ? 'إظهار المحتوى' : 'إظهار الهيكل' }}
  </LhButton>
</template>
vue
<script>
export default {
  data() {
    return { skeletonLoading: true }
  },
}
</script>

<template>
  <!-- الاستخدام الأساسي -->
  <LhSkeleton :rows="3" :loading="skeletonLoading">
    <p>اكتمل تحميل المحتوى: طارت كل الطيور عالية، وانصرفت الغيمة الوحيدة ساكنة.</p>
  </LhSkeleton>
  <!-- تبديل حالة التحميل -->
  <LhButton size="small" @click="skeletonLoading = !skeletonLoading">
    {{ skeletonLoading ? 'إظهار المحتوى' : 'إظهار الهيكل' }}
  </LhButton>
</template>

تركيب الصورة الرمزية ​

تركيب الصورة الرمزية
vue
<script setup lang="ts">
</script>

<template>
  <LhSkeleton avatar :rows="2" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSkeleton avatar :rows="2" />
</template>

إيقاف التأثير ​

هيكل ثابت
vue
<script setup lang="ts">
</script>

<template>
  <LhSkeleton :rows="3" :animated="false" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSkeleton :rows="3" :animated="false" />
</template>

كتلة العنصر النائب المستقلة SkeletonItem ​

SkeletonItem
vue
<script setup lang="ts">
</script>

<template>
  <LhSkeletonItem variant="circle" />
  <LhSkeletonItem variant="rect" style="width: 120px; height: 60px" />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSkeletonItem variant="circle" />
  <LhSkeletonItem variant="rect" style="width: 120px; height: 60px" />
</template>

Skeleton API ​

Props ​

الخاصيةالوصفالنوعالافتراضي
loadingحالة تحميل (عند false تُعرض الفتحة default)booleantrue
rowsعدد أسطر النصnumber3
avatarتضمين عنصر نائب دائري للصورة الرمزيةbooleanfalse
animatedتفعيل التأثيرbooleantrue
sxخصائص التخطيط السريع sxLhSxProps—

Slots ​

الفتحةالوصف
defaultالمحتوى الحقيقي الذي يُعرض عندما يكون loading يساوي false

SkeletonItem API ​

Props ​

الخاصيةالوصفالنوعالافتراضي
variantشكل كتلة العنصر النائب'text' | 'rect' | 'circle''text'
animatedتفعيل التأثيرbooleantrue
sxخصائص التخطيط السريع sxLhSxProps—

متغيّرات السمة ​

المتغيّرالوصفالافتراضي
--lh-skeleton-bgلون خلفية كتلة العنصر النائبلون الحبر (text-regular) بمزيج شفافية 10%
--lh-skeleton-highlightلون التدفق البارزتفتيح لون الخلفية نحو الأبيض بنسبة 45%
--lh-skeleton-radiusالانحناء الأساسي--lh-border-radius-small

إمكانية الوصول ​

  • كتل العنصر النائب aria-hidden="true"، لا تدخل قراءة الشاشة
  • الحاوية aria-busy="true" + aria-live="polite"، تُذيع تلقائيًا بعد تبديل المحتوى عند اكتمال التحميل
  • عند prefers-reduced-motion: reduce يُوقف تأثير التدفق تلقائيًا

تعريفات الأنواع ​

بنى TypeScript التي يصدّرها هذا المكوّن للخارج (مستخرجة تلقائيًا من packages/components/skeleton/src/types.ts و@lh-ui/share/core/*؛ انقر كل عنصر لتوسيع تعريفه الكامل؛ لأوصاف الخصائص انظر جدول Props أعلاه):

LhSkeletonProps
ts
export interface LhSkeletonProps {
  /** هل هي حالة تحميل (عند false تُعرض الفتحة default بالمحتوى الحقيقي) */
  loading?: boolean
  /** عدد أسطر النص */
  rows?: number
  /** تضمين عنصر نائب دائري للصورة الرمزية */
  avatar?: boolean
  /** تفعيل التأثير */
  animated?: boolean
  /** خصائص التخطيط السريع sx */
  sx?: LhSxProps
}
LhSkeletonItemProps
ts
export interface LhSkeletonItemProps {
  /** شكل كتلة العنصر النائب */
  variant?: LhSkeletonVariant
  /** تفعيل التأثير */
  animated?: boolean
  /** خصائص التخطيط السريع sx */
  sx?: LhSxProps
}
LhSkeletonVariant (مأخوذ من @lh-ui/share/core/skeleton)
ts
/** شكل كتلة العنصر النائب للهيكل */
export type LhSkeletonVariant = 'text' | 'rect' | 'circle'

جمال التقاليد، أساس الكود