Skip to content
API 风格:

مرساة Anchor ​

تنقّل بين مراسي الصفحة مع إبراز مرتبط بالتمرير. دلالة <nav> + aria-current="location".

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

vue
<script setup>
const anchorItems = [
  { id: 'sec-1', title: 'القسم الأول' },
  { id: 'sec-2', title: 'القسم الثاني', children: [{ id: 'sec-2-1', title: 'الجزء الأول من القسم الثاني' }] },
]
</script>

<template>
  <LhAnchor :items="anchorItems" />
</template>
vue
<script>
export default {
  data() {
    return {
      anchorItems: [
        { id: 'sec-1', title: 'القسم الأول' },
        { id: 'sec-2', title: 'القسم الثاني', children: [{ id: 'sec-2-1', title: 'الجزء الأول من القسم الثاني' }] },
      ],
    }
  },
}
</script>

<template>
  <LhAnchor :items="anchorItems" />
</template>

الترتيب الأفقي وخيارات التمرير ​

يبدّل direction="horizontal" الترتيب إلى أفقي؛ ويُلغي smooth التمرير السلس؛ ويعوّض offset إزاحة منطقة المرساة بالنسبة إلى أعلى حاوية التمرير؛ ويستمع target إلى حاوية تمرير محددة (الافتراضي window).

vue
<script setup>
const anchorItems = [
  { id: 'sec-1', title: 'القسم الأول' },
  { id: 'sec-2', title: 'القسم الثاني' },
]
</script>

<template>
  <!-- مراسي أفقية -->
  <LhAnchor
    :items="anchorItems"
    direction="horizontal"
    :offset="8"
    :smooth="true"
  />
</template>
vue
<script>
export default {
  data() {
    return {
      anchorItems: [
        { id: 'sec-1', title: 'القسم الأول' },
        { id: 'sec-2', title: 'القسم الثاني' },
      ],
    }
  },
}
</script>

<template>
  <!-- مراسي أفقية -->
  <LhAnchor
    :items="anchorItems"
    direction="horizontal"
    :offset="8"
    :smooth="true"
  />
</template>

API ​

خصائص LhAnchor ​

الخاصيةالوصفالنوعالافتراضي
itemsبيانات المراسي (تدعم المستويات الفرعية)[LhAnchorItem](#type-LhAnchorItem)[]—
targetحاوية التمرير (محدد أو عنصر، الافتراضي window)string | HTMLElement—
offsetإزاحة منطقة المرساة بالنسبة إلى أعلى حاوية التمرير (تُستخدم لتحديد الارتباط)number0
directionاتجاه الترتيب"vertical" | "horizontal"'vertical'
smoothتمرير سلسbooleantrue
sxخصائص التخطيط السريع sxLhSxProps—

أحداث LhAnchor ​

الحدثالوصفمعاملات الاستدعاء
changeيُطلق عند تغيّر المرساة النشطة حاليًا (عبر الارتباط بالتمرير أو النقر على المرساة)(id: string)
clickيُطلق عند النقر على رابط المرساة (يُطلق قبل انتقال التمرير)(event: MouseEvent, id: string)

LhAnchorItem ​

الحقلالوصفالنوع
idمُعرِّف العنصر الهدفstring
titleالنص المعروضstring
childrenمرارسٍ فرعيةLhAnchorItem[]

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

  • الحاوية هي عنصر <nav> دلالي وتحمل aria-label؛ ويُعلَّم المرساة الحالي بـ aria-current="location"
  • الروابط عناصر <a href="#id"> حقيقية (تعمل الانتقالات بدون JS أيضًا، ويُحسَّن النقر ليصبح تمريرًا سلسًا)
  • يتحوّل التمرير السلس تلقائيًا إلى انتقال فوري في الوضع prefers-reduced-motion: reduce

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

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

LhAnchorProps
ts
export interface LhAnchorProps {
  /** بيانات المراسي (تدعم المستويات الفرعية) */
  items: LhAnchorItem[]
  /** حاوية التمرير (محدد أو عنصر، الافتراضي window) */
  target?: string | HTMLElement
  /** إزاحة منطقة المرساة بالنسبة إلى أعلى حاوية التمرير (تُستخدم لتحديد الارتباط) */
  offset?: number
  /** اتجاه الترتيب */
  direction?: 'vertical' | 'horizontal'
  /** تمرير سلس */
  smooth?: boolean
  /** خصائص التخطيط السريع sx */
  sx?: LhSxProps
}
LhFlatAnchorItem (مأخوذ من @lh-ui/share/core/anchor)
ts
/** عنصر مرساة مُسطّح (للأغراض التصييرية) */
export interface LhFlatAnchorItem {
  id: string
  title: string
  level: number
}
LhAnchorItem (مأخوذ من @lh-ui/share/core/anchor)
ts
/** عنصر المرساة */
export interface LhAnchorItem {
  /** مُعرِّف العنصر الهدف */
  id: string
  /** النص المعروض */
  title: string
  /** مرارسٍ فرعية */
  children?: LhAnchorItem[]
}

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