انتقل إلى محتوى الدرس
الدرس 53
دورة بوتستراب 5

تتبع التمرير Scrollspy في بوتستراب 5Bootstrap 5 Scrollspy

أتقن تتبع التمرير التلقائي Scrollspy في بوتستراب 5.3 عبر مراقب التقاطع مع أشرطة التنقل والفهارس المتداخلة وضبط هامش الرصد والتحديث الديناميكي.
أقسام الدرس
5
الأمثلة
4
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 5تصفّح المواضيع

تغدو قراءة المراجع التقنية المطولة وتوثيق الواجهات البرمجية أكثر وضوحاً عندما يضيء الفهرس الجانبي أو الشريط العلوي تلقائياً أمام القسم المعروض حالياً على الشاشة؛ وهذه بالضبط مهمة إضافة Scrollspy في بوتستراب.

أعاد بوتستراب في الإصدارين 5.2 و5.3 بناء محرك تتبع التمرير بالكامل بالاعتماد على واجهة المتصفح الأصيلة IntersectionObserver بدلاً من حسابات الإزاحة الرقمية القديمة. وقد أثمر هذا التحديث ميزتين جوهريتين: أداء فائق الخفة دون إبطاء التمرير، وإلغاء الحاجة لشرط position: relative القديم أو سمة الإزاحة الملغاة.

مخطط آلية عمل تتبع التمرير عبر IntersectionObserver في بوتستراب 5.3 وربطه بشريط الروابط وهامش الرصد
HTML
<nav id="apiNav" class="navbar bg-body-tertiary px-3 mb-2">
  <ul class="nav nav-pills">
    <li class="nav-item">
      <a class="nav-link" href="#sec-auth">Auth</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="#sec-rate">Limits</a>
    </li>
  </ul>
</nav>

يتطلب ربط حاوية قابلة للتمرير — أو جسم الصفحة الكامل <body> — بشريط تنقل ثلاث قواعد دقيقة لا غنى عنها:

  1. منح عنصر التنقل الهدف معرّفاً فريداً مثل id="apiNav"، ووضع السمتين data-bs-spy="scroll" وdata-bs-target="#apiNav" على حاوية المحتوى المرصودة.
  2. مطابقة كل رابط تنقل href="#sec-id" مع عنصر عنوان يحمل نفس id="sec-id" داخل منطقة التمرير، بما في ذلك الروابط داخل القوائم المنسدلة .dropdown-item.
  3. إضافة السمة tabindex="0" على أي حاوية تمرير فرعية غير <body> لتمكين مستخدم لوحة المفاتيح من التركيز بداخلها وتمريرها بمفاتيح الأسهم.
HTML
<div data-bs-spy="scroll" data-bs-target="#apiNav"
  data-bs-smooth-scroll="true" tabindex="0"
  class="p-3 border rounded"
  style="height: 180px; overflow-y: auto;">
  <h4 id="sec-auth">Authentication</h4>
  <p>Bearer token details...</p>
  <h4 id="sec-rate">Rate Limits</h4>
  <p>120 requests per minute...</p>
</div>

تعتمد بوابات التوثيق الهندسي غالباً على فهارس جانبية متداخلة تجمع الأبواب الرئيسية وفروعها عبر قوائم .nav عمودية متشعبة، كما يدعم Scrollspy كذلك مجموعات القوائم .list-group بنفس السهولة.

وعندما يصل القارئ أثناء التمرير إلى قسم فرعي مثل #item-1-1، يضيف بوتستراب الكلاس .active تلقائياً إلى كلٍّ من الرابط الفرعي ورابط الباب الرئيسي الأب فوقه، ليظل موقع القارئ واضحاً ضمن شجرة الفهرس.

توفر سمتان تصريحيتان تحكماً دقيقاً في تجربة التمرير وحساسية الرصد دون كتابة كود إضافي:

  • التمرير السلس data-bs-smooth-scroll="true" — ينقل القارئ بانسيابية بصرية ناعمة نحو القسم المقصود فور النقر على رابطه في الفهرس.
  • هامش منطقة الرصد data-bs-root-margin="0px 0px -40%" — يُمرَّر مباشرةً لخيار rootMargin في مراقب التقاطع؛ حيث يؤدي تقليص الحافة السفلية بنسبة -40% إلى تفعيل القسم عندما يدخل منطقة القراءة العلوية المريحة بدلاً من تفعيله بمجرد ظهور أول بكسل منه أسفل النافذة.
HTML
<div data-bs-spy="scroll" data-bs-target="#sideToc"
  data-bs-root-margin="0px 0px -40%"
  data-bs-smooth-scroll="true" tabindex="0">
  <h4 id="item-1">1. Architecture</h4>
  <h5 id="item-1-1">1.1 Edge Nodes</h5>
</div>

كثيراً ما تضيف التطبيقات التفاعلية فصولاً محمّلة كسولاً أو تحذف أقساماً من شجرة العناصر بعد تحميل الصفحة. متى أضفت أو حذفت قسماً ديناميكياً داخل منطقة الرصد، استدعِ الدالة bootstrap.ScrollSpy.getOrCreateInstance(scrollEl).refresh() ليعيد مراقب التقاطع فهرسة الأهداف الجديدة فوراً.

كما يمكنك الاستماع للحدث activate.bs.scrollspy على حاوية التمرير — حيث تشير الخاصية event.relatedTarget إلى الرابط الذي تنشط للتو — لتحديث شريط تقدم القراءة أو عنوان القسم الحالي.

السمة أو الدالة أو الحدثموضع التطبيقالوظيفة في Bootstrap 5.3
data-bs-spy="scroll"حاوية التمرير أو <body>تشغيل محرك رصد التقاطع لتتبع الأقسام
data-bs-target="#navId"حاوية التمريرربط الحاوية بشريط .nav أو .navbar أو .list-group
tabindex="0"حاويات التمرير الفرعيةتمكين التركيز والتمرير عبر لوحة المفاتيح
data-bs-smooth-scroll="true"حاوية التمريرتفعيل الانتقال الانسيابي عند النقر على الروابط
data-bs-root-marginحاوية التمريرضبط حدود منطقة التفعيل مثل 0px 0px -40%
instance.refresh()كائن bootstrap.ScrollSpyإعادة فهرسة الأقسام بعد تعديل عناصر DOM برمجياً
activate.bs.scrollspyحاوية التمريرحدث ينطلق كلما انتقلت حالة النشاط لرابط جديد
HTML
<button id="addSecBtn" class="btn btn-sm btn-primary">
  Append Section &amp; Refresh Spy
</button>
<span id="spyStatus" class="ms-2 small text-muted">
  Active: #s1
</span>
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس توظيف محرك Scrollspy الحديث في بوتستراب 5.3 مع أشرطة التنقل والفهارس المتداخلة ومجموعات القوائم، وضبط التمرير السلس وهامش الرصد، وتحديث المراقب برمجياً مع الأحداث الحية. الخطوة التالية: انتقل الآن إلى الوحدة التاسعة بدءاً بدرس «أوضاع الألوان والوضع الداكن في بوتستراب 5.3» لبناء واجهات تدعم الوضعين الفاتح والداكن والثيمات المخصصة باحترافية.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Scrollspy تتبع التمرير التلقائي
إضافة برمجية في بوتستراب تحدّث حالة النشاط على روابط التنقل تلقائياً تبعاً للقسم الظاهر أثناء التمرير.
للمراجعة
02 IntersectionObserver مراقب تقاطع العناصر
واجهة متصفح أصيلة غير متزامنة يعتمد عليها بوتستراب 5.2+ لرصد دخول وخروج الأقسام بكفاءة عالية.
للمراجعة
03 Root Margin (data-bs-root-margin) هامش منطقة الرصد
قيمة هامش تتحكم في نطاق النافذة الفعّال لالتقاط القسم النشط ومنع التفعيل المبكر أسفل الشاشة.
للمراجعة
04 Hierarchical Activation التنشيط الهرمي المتداخل
ميزة تلوين كلٍّ من الرابط الفرعي ورابط الباب الرئيسي الأب عند قراءة قسم فرعي متداخل.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 TOC فهرس المحتويات
Table of Contents
قائمة عناوين المستند الجانبية المتزامنة لحظياً مع موضع القراءة عبر Scrollspy.
للمراجعة
02 SPA تطبيق الصفحة الواحدة
Single-Page Application
تطبيق تفاعلي تُستخدم فيه دالة refresh() لإعادة فهرسة الأقسام المضافة ديناميكياً دون إعادة تحميل.
للمراجعة
03 FPS معدل الإطارات في الثانية
Frames Per Second
معيار سلاسة الحركة البصرية الذي يحافظ عليه مراقب التقاطع دون إرهاق خيط المعالجة الرئيسي.
للمراجعة
04 CMS نظام إدارة المحتوى
Content Management System
منصة نشر تولّد معرّفات العناوين وروابط فهرس القراءة التلقائي للمقالات الطويلة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. صمّم تخطيطاً من عمودين يضم فهرس .nav.nav-pills متداخلاً ومنطقة محتوى قابلة للتمرير مزودة بسمات data-bs-spy="scroll" وdata-bs-smooth-scroll="true" وdata-bs-root-margin="0px 0px -40%" وtabindex="0".

  2. اكتب معالج نقر يضيف عنواناً وفقرة ورابطاً مقابلاً في الفهرس ثم يستدعي bootstrap.ScrollSpy.getOrCreateInstance(el).refresh() ويعرض القسم النشط عبر حدث activate.bs.scrollspy.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما واجهة المتصفح الأصيلة التي يعتمد عليها محرك Scrollspy في بوتستراب 5.3 بدلاً من حسابات التمرير القديمة؟

02

في بوتستراب 5.3، يجب إضافة tabindex="0" لحاويات التمرير الفرعية لتمكين مستخدمي لوحة المفاتيح من التركيز بداخلها وتمريرها.

03

ما السمة الحديثة التي حلّت محل سمة الإزاحة القديمة في بوتستراب 5.3 لضبط نطاق التقاط الأقسام؟

04

عند ظهور قسم فرعي مربوط داخل قائمة .nav متداخلة، كيف يحدّث Scrollspy كلاس النشاط؟

05

ما الدالة الواجب استدعاؤها بعد إضافة أو حذف أقسام برمجياً داخل حاوية مرصودة بـ Scrollspy؟

06

يعمل Scrollspy حصرياً مع مكوّن .navbar ولا يمكن ربطه بمجموعة قائمة .list-group.

07

ما الحدث الذي ينطلق على حاوية التمرير كلما فعّل Scrollspy رابطاً جديداً؟

08

كيف يتعامل بوتستراب مع data-bs-smooth-scroll="true" إذا فعّل المستخدم خيار تقليل الحركة في إعدادات نظامه؟