الفرق بين المراجعتين لصفحة: «Bootstrap/carousel»

من موسوعة حسوب
طلا ملخص تعديل
لا ملخص تعديل
 
(4 مراجعات متوسطة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:عرض الشرائح في إطار العمل Bootstrap}}</noinclude>
<noinclude>{{DISPLAYTITLE:عرض الشرائح في إطار العمل Bootstrap}}</noinclude>
الدوّار Carousel هو مكوِّن عرض شرائح في إطار العمل Bootstrap لتدوير العناصر - صوّر أو شرائح نصيّة - كما يفعل حزام نقل الأمتعة في المطارات.
الدوّار (carousel) هو مكوِّن عرض شرائح في إطار العمل Bootstrap لتدوير العناصر - صوّر أو شرائح نصيّة - كما يفعل حزام نقل الأمتعة في المطارات.


== آليّة العمل ==
== آليّة العمل ==
ينتقل الدوّار بين سلسلة من المحتوى الموجود ضمن شرائح عرض دوريًّا. يُبنَى الدوّار بالانتقالات ثلاثيّة الأبعاد في CSS، وبضعة شفرات JavaScript. يعمل الدوّار مع سلسلة من الصوّر، أو النصوص أو الوسوم المُخصَّصة؛ كما يحتوي على إمكانيّة التحكّم في الانتقال (تقديم أو تأخير المعروض) ومؤشّرات.
ينتقل الدوّار بين سلسلة من المحتوى الموجود ضمن شرائح عرض دوريًّا. يُبنَى الدوّار بالانتقالات ثلاثيّة الأبعاد في [[CSS]]، وبضعة شفرات [[JavaScript]]. يعمل الدوّار مع سلسلة من الصوّر، أو النصوص أو الوسوم المُخصَّصة؛ كما يحتوي على إمكانيّة التحكّم في الانتقال (تقديم أو تأخير المعروض) ومؤشّرات.


يتفادى مكوِّن الدوّار في Bootstrap، في المتصفّحات التي تدعم واجهة التطبيقات [https://www.w3.org/TR/page-visibility Page visibility]، يتفادى تفعيل الانتقال بين الشرائح عندما تكون صفحة الويب مخفيّة عن الزائر (مثلًا إذا كانت تبويب المتصفّح غير نشط أو إذا كانت نافذة المتصفّح مُصغَّرة على شريط الأدوات في نظام التشغيل).
يتفادى مكوِّن الدوّار في Bootstrap، في المتصفّحات التي تدعم واجهة التطبيقات [https://www.w3.org/TR/page-visibility Page visibility]، يتفادى تفعيل الانتقال بين الشرائح عندما تكون صفحة الويب مخفيّة عن الزائر (مثلًا إذا كانت تبويب المتصفّح غير نشط أو إذا كانت نافذة المتصفّح مُصغَّرة على شريط الأدوات في نظام التشغيل).
'''ملحوظة''': تأثير الحركة الخاص بهذه المكونة يعتمد على استعلام الوسائط <code>prefers-reduced-motion</code>. راجع [[Bootstrap/accessibility|صفحة سهولة الوصول]] لمزيد من المعلومات.


يُرجى الانتباه إلى أنّ تداخل الدوّارات غير مدعوم، كما أنّ الدوّارات عمومًا ليست متوافقة مع معايير سهولة الوصول.
يُرجى الانتباه إلى أنّ تداخل الدوّارات غير مدعوم، كما أنّ الدوّارات عمومًا ليست متوافقة مع معايير سهولة الوصول.


انتبه إنْ كنت تبني JavaScript من الملفّات المصدريّة إلى أنّ الدوّار مبنيّ على مكتبة [Bootstrap/javascript#Util|util.js].
انتبه إنْ كنت تبني JavaScript من الملفّات المصدريّة إلى أنّ الدوّار مبنيّ على مكتبة [[Bootstrap/javascript#Util|util.js]].


== مثال ==
== مثال ==
سطر 15: سطر 17:
لا تنظّم الدوّارات في إطار العمل Bootstrap أبعاد الشرائح تلقائيًّا، لذا قد تحتاج إلى استخدام أدوات إضافيّة أو تنسيقات مُخصَّصة لتحديد أبعاد المحتوى لتأخذ شكلًا صحيحا. رغم أنّ الدوّارات تدعم التحكّم في الانتقال (تقديم أو تأخير المعروض) والمؤشِّرات إلّا أنّها ليست من المتطلّبات التي لا بدّ منها.
لا تنظّم الدوّارات في إطار العمل Bootstrap أبعاد الشرائح تلقائيًّا، لذا قد تحتاج إلى استخدام أدوات إضافيّة أو تنسيقات مُخصَّصة لتحديد أبعاد المحتوى لتأخذ شكلًا صحيحا. رغم أنّ الدوّارات تدعم التحكّم في الانتقال (تقديم أو تأخير المعروض) والمؤشِّرات إلّا أنّها ليست من المتطلّبات التي لا بدّ منها.


تأكّد من تعيين معرِّف فريد على الدوّار (الصنف <code>‎.carousel</code>) لأزرار التحكّم الاختياريّة، خصوصًا إنْ كانت لديك دوّارات عدّة في صفحة واحدة.
'''يجب إضافة الصنف ‎.<code>active</code> إلى إحدى الشرائح''' وإلا لن يظهر الدوّار. تأكد أيضًا من تعيين معرّف فريد للدوّار لأجل عناصر التحكم الاختيارية، خاصة إذا كنت تستخدم عدة دوّارات في صفحة واحدة. يجب أن تحتوي عناصر التحكم والمؤشرات على سمة <code>data-target</code> (أو <code>href</code> للروابط) تتطابق مع معرف الدوّار.


=== دوّار يحتوي على شرائح فقط ===
=== دوّار يحتوي على شرائح فقط ===


في ما يلي دوّار يقتصر محتواه على شرائح عرض. لاحظ وجود الصنفيْن <code>‎.d-block</code> و <code>‎.img-fluid</code> على صوّر الدوّار لمنع المتصفّح من استخدام المحاذاة المبدئيّة للصوّر.
في ما يلي دوّار يقتصر محتواه على شرائح عرض. لاحظ وجود الصنفيْن <code>‎.d-block</code> و <code>‎.w-100</code> على صوّر الدوّار لمنع المتصفّح من استخدام المحاذاة المبدئيّة للصوّر.


<syntaxhighlight lang="html">
<syntaxhighlight lang="html">
سطر 25: سطر 27:
   <div class="carousel-inner">
   <div class="carousel-inner">
     <div class="carousel-item active">
     <div class="carousel-item active">
      <img class="d-block w-100" src="..." alt="الشريحة الأولى">
        <img src="..." class="d-block w-100" alt="...">
     </div>
     </div>
     <div class="carousel-item">
     <div class="carousel-item">
       <img class="d-block w-100" src="..." alt="الشريحة الثانيّة">
       <img src="..." class="d-block w-100" alt="...">
     </div>
     </div>
     <div class="carousel-item">
     <div class="carousel-item">
       <img class="d-block w-100" src="..." alt="الشريحة الثالثة">
       <img src="..." class="d-block w-100" alt="...">
     </div>
     </div>
   </div>
   </div>
سطر 53: سطر 55:
     </div>
     </div>
   </div>
   </div>
  <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
    <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
     <span class="carousel-control-prev-icon" aria-hidden="true"></span>
     <span class="carousel-control-prev-icon" aria-hidden="true"></span>
     <span class="sr-only">السابق</span>
     <span class="sr-only">السابق</span>
سطر 77: سطر 79:
   <div class="carousel-inner">
   <div class="carousel-inner">
     <div class="carousel-item active">
     <div class="carousel-item active">
       <img class="d-block w-100" src="..." alt="الشريحة الأولى">
       <img src="..." class="d-block w-100" alt="...">
     </div>
     </div>
     <div class="carousel-item">
     <div class="carousel-item">
       <img class="d-block w-100" src="..." alt="الشريحة الثانيّة">
       <img src="..." class="d-block w-100" alt="...">
     </div>
     </div>
     <div class="carousel-item">
     <div class="carousel-item">
       <img class="d-block w-100" src="..." alt="الشريحة الثالثة">
       <img src="..." class="d-block w-100" alt="...">
     </div>
     </div>
   </div>
   </div>
   <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
   <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
     <span class="carousel-control-prev-icon" aria-hidden="true"></span>
     <span class="carousel-control-prev-icon" aria-hidden="true"></span>
     <span class="sr-only">السابق</span>
     <span class="sr-only">سابق</span>
   </a>
   </a>
   <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
   <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
     <span class="carousel-control-next-icon" aria-hidden="true"></span>
     <span class="carousel-control-next-icon" aria-hidden="true"></span>
     <span class="sr-only">التالي</span>
     <span class="sr-only">لاحق</span>
   </a>
   </a>
</div>
</div>
</syntaxhighlight>
</syntaxhighlight>
==== تنبيه بخصوص العنصُر النشط في البدء ====
يجب أن يكون الصنف <code>‎.active</code> مُطبَّقًا على واحدة من الشرائح؛ وإلّا فإنّ الدوّار لن يكون مرئيّا.


=== إضافة لافتات للشرائح ===
=== إضافة لافتات للشرائح ===
استخدم الصنف <code>‎.carousel-caption</code> ضمن أي شريحة عرض (<code>‎.carousel-item</code>) لإضافة لافتات بسهولة إلى شرائح العرض. يمكن إخفاء اللافتات في إطارات العرض Viewports الصغيرة - كما في المثال أدناه - باستخدام أدوات العرض. نخفي اللافتات في المثال التالي أوّلًا باستخدام الصنف <code>‎.d-none</code> ثم نعاود إظهارها بدءًا من الأجهزة ذات شاشات العرض المتوسّطة بالصنف <code>‎.d-md-block</code>.
استخدم الصنف <code>‎.carousel-caption</code> ضمن أي شريحة عرض (<code>‎.carousel-item</code>) لإضافة لافتات بسهولة إلى شرائح العرض. يمكن إخفاء اللافتات في إطارات العرض (viewports) الصغيرة - كما في المثال أدناه - باستخدام [[Bootstrap/display|أدوات العرض]]. نخفي اللافتات في المثال التالي أوّلًا باستخدام الصنف <code>‎.d-none</code> ثم نعاود إظهارها بدءًا من الأجهزة ذات شاشات العرض المتوسّطة بالصنف <code>‎.d-md-block</code>.


<syntaxhighlight lang="html">
<syntaxhighlight lang="html">
<div class="carousel-item">
<div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
  <img src="..." alt="...">
  <ol class="carousel-indicators">
  <div class="carousel-caption d-none d-md-block">
    <li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li>
     <h5>...</h5>
    <li data-target="#carouselExampleCaptions" data-slide-to="1"></li>
     <p>...</p>
    <li data-target="#carouselExampleCaptions" data-slide-to="2"></li>
  </ol>
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img src="..." class="d-block w-100" alt="...">
      <div class="carousel-caption d-none d-md-block">
        <h5>لافتة الشريحة الأولى</h5>
        <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
      </div>
     </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
      <div class="carousel-caption d-none d-md-block">
        <h5>لافتة الشريحة الثانية</h5>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
      </div>
     </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
      <div class="carousel-caption d-none d-md-block">
        <h5>لافتة الشريحة الثالثة</h5>
        <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
      </div>
    </div>
   </div>
   </div>
  <a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">سابق</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">لاحق</span>
  </a>
</div>
</syntaxhighlight>
=== تأثير الخفوت ===
أضف الصنف ‎<code>.carousel-fade</code> إلى العنصر الدوار  لتحريك الشرائح وإنشاء انتقال الخفوت.<syntaxhighlight lang="html">
<div id="carouselExampleFade" class="carousel slide carousel-fade" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleFade" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleFade" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>
</syntaxhighlight>
=== مجالات ‎<code>.carousel-item</code> الفردية ===
أضف <code>data-interval=""‎</code> إلى‎ .<code>carousel-item</code> لتغيير الوقت اللازم للانتقال إلى العنصر التالية.<syntaxhighlight lang="html">
<div id="carouselExampleInterval" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active" data-interval="10000">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item" data-interval="2000">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleInterval" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleInterval" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>
</div>
</syntaxhighlight>
</syntaxhighlight>
== استخدام مُلحَق JavaScript ==
== استخدام مُلحَق JavaScript ==


=== استخدام الدوّار بواسطة خاصيّات البيانات Data attributes ===
=== استخدام الدوّار بواسطة خاصيّات البيانات (Data attributes) ===


استخدم خاصيّات البيانات للتحكّم في وضعيّة الدوّار بسهولة. تقبل الخاصيّة <code>data-slide</code> القيمتيْن <code>prev</code> (السابق) أو <code>next</code> (اللّاحق) اللتين تغيّران وضعيّة الشرائح انطلاقًا من وضعيّتها الحاليّة. كما يمكن استخدام الخاصيّة <code>data-slide-to</code> وتمرير قيمة عدديّة إليها تمثّل ترتيب شريحة في معرض الشرائح؛ مثلًا تنقل القيمة <code>data-slide-to="2"‎</code> معرض الشرائح إلى الشريحة ذات الترتيب <code>2</code>، علمًا أنّ الترتيب يبدأ من <code>0</code>.
استخدم خاصيّات البيانات للتحكّم في وضعيّة الدوّار بسهولة. تقبل الخاصيّة <code>data-slide</code> القيمتيْن <code>prev</code> (السابق) أو <code>next</code> (اللّاحق) اللتين تغيّران وضعيّة الشرائح انطلاقًا من وضعيّتها الحاليّة. كما يمكن استخدام الخاصيّة <code>data-slide-to</code> وتمرير قيمة عدديّة إليها تمثّل ترتيب شريحة في معرض الشرائح؛ مثلًا تنقل القيمة <code>data-slide-to="2"‎</code> معرض الشرائح إلى الشريحة ذات الترتيب <code>2</code>، علمًا أنّ الترتيب يبدأ من <code>0</code>.


تُستخدَم الخاصيّة <code>data-ride="carousel"‎</code> للدلالة على أنّ تحريك الدوّار يبدأ مباشرةً عند بدء تحميل الصفحة. '''لا يمكن استخدام هذه الخاصيّة عند تمهيد Initialization نفس الدوّار يدويًّا باستخدام JavaScript (تكرار غير ضروريّ)'''.
تُستخدَم الخاصيّة <code>data-ride="carousel"‎</code> للدلالة على أنّ تحريك الدوّار يبدأ مباشرةً عند بدء تحميل الصفحة. '''لا يمكن استخدام هذه الخاصيّة عند تهيئة (initialization) نفس الدوّار يدويًّا باستخدام JavaScript (تكرار غير ضروريّ)'''.


=== كتابة شفرة JavaScript مُخصَّصة ===
=== كتابة شيفرة JavaScript مُخصَّصة ===


يمكن استدعاء الدوّار يدويًّا على النحو التالي:
يمكن استدعاء الدوّار يدويًّا على النحو التالي:
سطر 131: سطر 212:
يمكن تمرير الخيّارات عبر خاصيّات البيانات أو عن طريق JavaScript. ألحق اسم الخيّار بالكلمة <code>data-‎</code> (مثلًا <code>data-interval=""‎</code> للخيّار <code>interval</code>) عند التمرير عبر خاصيّات البيانات.
يمكن تمرير الخيّارات عبر خاصيّات البيانات أو عن طريق JavaScript. ألحق اسم الخيّار بالكلمة <code>data-‎</code> (مثلًا <code>data-interval=""‎</code> للخيّار <code>interval</code>) عند التمرير عبر خاصيّات البيانات.


{|class="wikitable"
{| class="wikitable"
!الاسم
!الاسم
!النوع
!النوع
سطر 137: سطر 218:
!الوصف
!الوصف
|-
|-
|interval (مجال)
|<code>interval</code> (مجال)
|عدد
|عدد
|5000
|<code>5000</code>
|المقدار الزمنيّ للمدّة الفاصلة بين تدوير عنصُر تلقائيا. لا يتبدّل الدوّار تلقائيَّا إنْ كانت هذه القيمة مساويّةً لـ<code>false</code>.
|المقدار الزمنيّ للمدّة الفاصلة بين تدوير عنصُر تلقائيًا. لا يتبدّل الدوّار تلقائيَّا إنْ كانت هذه القيمة مساويّةً للقيمة <code>false</code>.
|-
|-
|keyboard (لوحة مفاتيح)
|<code>keyboard</code> (لوحة مفاتيح)
|منطقيّة
|منطقيّة
|true
|<code>true</code>
|إن كان الدوّار يتفاعل مع أحداث لوحة المفاتيح
|إن كان الدوّار يتفاعل مع أحداث لوحة المفاتيح
|-
|-
|pause (توقّف)
|<code>pause</code> (توقّف)
|سلسلة محارف | قيمة منطقية
| سلسلة محارف | قيمة منطقية
|"hover"
|<code>"hover"</code>
|يوقف التدوير إن كانت القيمة تساوي <code>"hover"</code>, عند الحدث <code>mouseenter</code> (مرور المؤشّر على الدوّار) ويعود إلى التدوير عند وقوع الحدث <code>mouseleave</code> (تراجع المؤشّر عن الدوّار). إنْ كانت القيمة <code>false</code> فإن حومان المؤشّر على الدوّار لن يجعله يتوقّف.  
|يوقف التدوير إن كانت القيمة تساوي <code>"hover"</code>, عند الحدث <code>mouseenter</code> (مرور المؤشّر على الدوّار) ويعود إلى التدوير عند وقوع الحدث <code>mouseleave</code> (تراجع المؤشّر عن الدوّار). إنْ كانت القيمة <code>false</code> فإن حومان المؤشّر على الدوّار لن يجعله يتوقّف.  
بالنسبة للأجهزة التي تعمل باللمس فإن القيمة <code>"hover"</code> ينتُج عنها توقّف الدوّار عند الحدث <code>touchend</code> (انتهاء المستخدم التفاعل مع الدوّار) لمجاليْن، ثم يواصل. يُرجى ملاحظة أنّ هذا السلوك يعمل إضافةً إلى سلوك المؤشّر المذكور أعلاه.
بالنسبة للأجهزة التي تعمل باللمس فإن القيمة <code>"hover"</code> ينتُج عنها توقّف الدوّار عند الحدث <code>touchend</code> (انتهاء المستخدم التفاعل مع الدوّار) لمجاليْن، ثم يواصل. يُرجى ملاحظة أنّ هذا السلوك يعمل إضافةً إلى سلوك المؤشّر المذكور أعلاه.
|-
|-
|ride (تدوير)
|<code>ride</code> (تدوير)
|سلسلة محارف
|سلسلة محارف
|false
|<code>false</code>
|يشغّل الدوّار تلقائيًّل بعد أن يمرّر المستخدم يدويًّا العنصُر الأوّل. إنْ كانت القيمة تساوي "carousel" فهذا يدلّ على تشغيل الدوّار تلقائيًّا مع تحميل الصفحة.
|يشغّل الدوّار تلقائيًّل بعد أن يمرّر المستخدم يدويًّا العنصُر الأوّل. إنْ كانت القيمة تساوي <code>"carousel"</code> فهذا يدلّ على تشغيل الدوّار تلقائيًّا مع تحميل الصفحة.
|-
|<code>wrap</code> (التفاف)
|قيمة منطقيّة
|<code>true</code>
|إن كان يتوجّب تشغيل الدوّار باستمرار أم لا.
|-
|-
|wrap (التفاف)
|touch
|قيمة منطقيّة</td>
|قيمة منطقيّة
|true
|<code>true</code>
|إن كان يتوجّب تشغيل الدوّار باستمرار أم لا
|إن كان يتوجّب دعم تفاعلات الانتقال يمين/يسار على شاشات اللمس.
|}
|}
=== التوابع ===
=== التوابع ===


'''تنبيه: التوابع غير المتزامنة والانتقالات'''
'''تنبيه: التوابع غير المتزامنة والانتقالات'''


توابع واجهة التطبيقات جميعها غير متزامنة وتشغّل انتقالا. تعود هذه التوابع لشفرة الاستدعاء مباشرةً بعد بدء الانتقال، لكن قبل أن ينتهي. علاوةً على ذلك، يُتجاهل استدعاء تابع على مكوِّن في طور الانتقال.
توابع واجهة التطبيقات جميعها غير متزامنة وتشغّل انتقالًا. تعود هذه التوابع لشيفرة الاستدعاء مباشرةً بعد بدء الانتقال، لكن قبل أن ينتهي. علاوةً على ذلك، يُتجاهل استدعاء تابع على مكوِّن في طور الانتقال.
 


[[Bootstrap/javascript|راجع توثيق JavaScript في Bootstrap للمزيد من المعلومات]].
[[Bootstrap/javascript|راجع توثيق JavaScript في Bootstrap للمزيد من المعلومات]].


==== <code>‎.carousel(options)</code> ====
==== <code>‎.carousel(options)‎‎</code> ====


يستهلّ الدوّار بكائن خيّارات اختيّاري ويبدأ الانتقال بين العناصر.
يستهلّ الدوّار بكائن خيّارات اختيّاري ويبدأ الانتقال بين العناصر.
سطر 182: سطر 268:
</syntaxhighlight>
</syntaxhighlight>


==== <code>‎.carousel('cycle')</code> ====
==== <code>‎.carousel('cycle')‎‎</code> ====


الانتقال بين عناصر الدوّار من اليسار إلى اليمين.
الانتقال بين عناصر الدوّار من اليسار إلى اليمين.


==== <code>‎.carousel('pause')</code> ====
==== <code>‎.carousel('pause')‎‎</code> ====


يوقِف الدوّار عن الانتقال بين العناصر.
يوقِف الدوّار عن الانتقال بين العناصر.


==== <code>‎.carousel(number)</code> ====
==== <code>‎.carousel(number)‎‎</code> ====


ينقُل الدوّار إلى شريحة معيَّنة (حيث <code>number</code> يمثّل ترتيبها، الشريحة الأولى ذات ترتيب <code>0</code>). '''يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف''' (أي قبل وقوع الحدث <code>slid.bs.carousel</code>).
ينقُل الدوّار إلى شريحة معيَّنة (حيث <code>number</code> يمثّل ترتيبها، الشريحة الأولى ذات ترتيب <code>0</code>). '''يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف''' (أي قبل وقوع الحدث <code>slid.bs.carousel</code>).


==== <code>‎.carousel('prev')</code> ====
==== <code>‎.carousel('prev')‎‎</code> ====
يننقل إلى الشريحة السابقة.  '''يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف''' (أي قبل وقوع الحدث <code>slid.bs.carousel</code>).
يننقل إلى الشريحة السابقة.  '''يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف''' (أي قبل وقوع الحدث <code>slid.bs.carousel</code>).


==== <code>‎.carousel('next')</code> ====
==== <code>‎.carousel('next')‎‎</code> ====
يننقل إلى الشريحة المواليّة.  '''يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف''' (أي قبل وقوع الحدث <code>slid.bs.carousel</code>).
يننقل إلى الشريحة المواليّة.  '''يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف''' (أي قبل وقوع الحدث <code>slid.bs.carousel</code>).


==== <code>‎.carousel('dispose')</code> ====
==== <code>‎.carousel('dispose')‎‎</code> ====


يحذف عنصُر الدوّار.
يحذف عنصُر الدوّار.
سطر 213: سطر 299:
* <code>to</code>: ترتيب العنصُر الموالي.
* <code>to</code>: ترتيب العنصُر الموالي.


تُطلَق جميع أحداث الدوّار ضمن الدوّار نفسه (بمعنى أنّها من العنصُر <code>'&lt;div class="carousel"‎&gt;</code>).
تُطلَق جميع أحداث الدوّار ضمن الدوّار نفسه (بمعنى أنّها من العنصُر <code>&lt;div class="carousel"‎&gt;</code>).
{|class="wikitable"
{| class="wikitable"
!نوع الحدَث
!نوع الحدَث
!الوصف
!الوصف
سطر 231: سطر 317:


== مصادر ==
== مصادر ==
- [https://getbootstrap.com/docs/4.0/components/carousel) صفحة Carousel في توثيق Bootstrap].
* [https://getbootstrap.com/docs/4.5/components/carousel/ صفحة Carousel في توثيق Bootstrap].
[[تصنيف:Bootstrap|{{SUBPAGENAME}}]]
[[تصنيف:Bootstrap components|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 06:51، 14 يوليو 2020

الدوّار (carousel) هو مكوِّن عرض شرائح في إطار العمل Bootstrap لتدوير العناصر - صوّر أو شرائح نصيّة - كما يفعل حزام نقل الأمتعة في المطارات.

آليّة العمل

ينتقل الدوّار بين سلسلة من المحتوى الموجود ضمن شرائح عرض دوريًّا. يُبنَى الدوّار بالانتقالات ثلاثيّة الأبعاد في CSS، وبضعة شفرات JavaScript. يعمل الدوّار مع سلسلة من الصوّر، أو النصوص أو الوسوم المُخصَّصة؛ كما يحتوي على إمكانيّة التحكّم في الانتقال (تقديم أو تأخير المعروض) ومؤشّرات.

يتفادى مكوِّن الدوّار في Bootstrap، في المتصفّحات التي تدعم واجهة التطبيقات Page visibility، يتفادى تفعيل الانتقال بين الشرائح عندما تكون صفحة الويب مخفيّة عن الزائر (مثلًا إذا كانت تبويب المتصفّح غير نشط أو إذا كانت نافذة المتصفّح مُصغَّرة على شريط الأدوات في نظام التشغيل).

ملحوظة: تأثير الحركة الخاص بهذه المكونة يعتمد على استعلام الوسائط prefers-reduced-motion. راجع صفحة سهولة الوصول لمزيد من المعلومات.

يُرجى الانتباه إلى أنّ تداخل الدوّارات غير مدعوم، كما أنّ الدوّارات عمومًا ليست متوافقة مع معايير سهولة الوصول.

انتبه إنْ كنت تبني JavaScript من الملفّات المصدريّة إلى أنّ الدوّار مبنيّ على مكتبة util.js.

مثال

لا تنظّم الدوّارات في إطار العمل Bootstrap أبعاد الشرائح تلقائيًّا، لذا قد تحتاج إلى استخدام أدوات إضافيّة أو تنسيقات مُخصَّصة لتحديد أبعاد المحتوى لتأخذ شكلًا صحيحا. رغم أنّ الدوّارات تدعم التحكّم في الانتقال (تقديم أو تأخير المعروض) والمؤشِّرات إلّا أنّها ليست من المتطلّبات التي لا بدّ منها.

يجب إضافة الصنف ‎.active إلى إحدى الشرائح وإلا لن يظهر الدوّار. تأكد أيضًا من تعيين معرّف فريد للدوّار لأجل عناصر التحكم الاختيارية، خاصة إذا كنت تستخدم عدة دوّارات في صفحة واحدة. يجب أن تحتوي عناصر التحكم والمؤشرات على سمة data-target (أو href للروابط) تتطابق مع معرف الدوّار.

دوّار يحتوي على شرائح فقط

في ما يلي دوّار يقتصر محتواه على شرائح عرض. لاحظ وجود الصنفيْن ‎.d-block و ‎.w-100 على صوّر الدوّار لمنع المتصفّح من استخدام المحاذاة المبدئيّة للصوّر.

<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active">
        <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
  </div>
</div>

إضافة أزرار تحكّم

يضيف المثال التالي زرّيْن للتحكّم في الانتقال بين الشرائح.

<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img class="d-block w-100" src="..." alt="الشريحة الأولى">
    </div>
    <div class="carousel-item">
      <img class="d-block w-100" src="..." alt="الشريحة الثانيّة">
    </div>
    <div class="carousel-item">
      <img class="d-block w-100" src="..." alt="الشريحة الثالثة">
    </div>
  </div>
    <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">السابق</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">التالي</span>
  </a>
</div>

إضافة مؤشّرات إلى الدوّار

يضيف المثال التالي مؤشّرات إلى الدوّار السابق للإشارة إلى ترتيب الشريحة ضمن الشرائح.

<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
  <ol class="carousel-indicators">
    <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
    <li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
    <li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
  </ol>
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">سابق</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">لاحق</span>
  </a>
</div>

إضافة لافتات للشرائح

استخدم الصنف ‎.carousel-caption ضمن أي شريحة عرض (‎.carousel-item) لإضافة لافتات بسهولة إلى شرائح العرض. يمكن إخفاء اللافتات في إطارات العرض (viewports) الصغيرة - كما في المثال أدناه - باستخدام أدوات العرض. نخفي اللافتات في المثال التالي أوّلًا باستخدام الصنف ‎.d-none ثم نعاود إظهارها بدءًا من الأجهزة ذات شاشات العرض المتوسّطة بالصنف ‎.d-md-block.

<div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
  <ol class="carousel-indicators">
    <li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li>
    <li data-target="#carouselExampleCaptions" data-slide-to="1"></li>
    <li data-target="#carouselExampleCaptions" data-slide-to="2"></li>
  </ol>
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img src="..." class="d-block w-100" alt="...">
      <div class="carousel-caption d-none d-md-block">
        <h5>لافتة الشريحة الأولى</h5>
        <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
      </div>
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
      <div class="carousel-caption d-none d-md-block">
        <h5>لافتة الشريحة الثانية</h5>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
      </div>
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
      <div class="carousel-caption d-none d-md-block">
        <h5>لافتة الشريحة الثالثة</h5>
        <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
      </div>
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">سابق</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">لاحق</span>
  </a>
</div>

تأثير الخفوت

أضف الصنف ‎.carousel-fade إلى العنصر الدوار لتحريك الشرائح وإنشاء انتقال الخفوت.

<div id="carouselExampleFade" class="carousel slide carousel-fade" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleFade" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleFade" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>

مجالات ‎.carousel-item الفردية

أضف data-interval=""‎ إلى‎ .carousel-item لتغيير الوقت اللازم للانتقال إلى العنصر التالية.

<div id="carouselExampleInterval" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active" data-interval="10000">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item" data-interval="2000">
      <img src="..." class="d-block w-100" alt="...">
    </div>
    <div class="carousel-item">
      <img src="..." class="d-block w-100" alt="...">
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleInterval" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleInterval" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>

استخدام مُلحَق JavaScript

استخدام الدوّار بواسطة خاصيّات البيانات (Data attributes)

استخدم خاصيّات البيانات للتحكّم في وضعيّة الدوّار بسهولة. تقبل الخاصيّة data-slide القيمتيْن prev (السابق) أو next (اللّاحق) اللتين تغيّران وضعيّة الشرائح انطلاقًا من وضعيّتها الحاليّة. كما يمكن استخدام الخاصيّة data-slide-to وتمرير قيمة عدديّة إليها تمثّل ترتيب شريحة في معرض الشرائح؛ مثلًا تنقل القيمة data-slide-to="2"‎ معرض الشرائح إلى الشريحة ذات الترتيب 2، علمًا أنّ الترتيب يبدأ من 0.

تُستخدَم الخاصيّة data-ride="carousel"‎ للدلالة على أنّ تحريك الدوّار يبدأ مباشرةً عند بدء تحميل الصفحة. لا يمكن استخدام هذه الخاصيّة عند تهيئة (initialization) نفس الدوّار يدويًّا باستخدام JavaScript (تكرار غير ضروريّ).

كتابة شيفرة JavaScript مُخصَّصة

يمكن استدعاء الدوّار يدويًّا على النحو التالي:

$('.carousel').carousel()

الخيّارات

يمكن تمرير الخيّارات عبر خاصيّات البيانات أو عن طريق JavaScript. ألحق اسم الخيّار بالكلمة data-‎ (مثلًا data-interval=""‎ للخيّار interval) عند التمرير عبر خاصيّات البيانات.

الاسم النوع القيمة المبدئيّة الوصف
interval (مجال) عدد 5000 المقدار الزمنيّ للمدّة الفاصلة بين تدوير عنصُر تلقائيًا. لا يتبدّل الدوّار تلقائيَّا إنْ كانت هذه القيمة مساويّةً للقيمة false.
keyboard (لوحة مفاتيح) منطقيّة true إن كان الدوّار يتفاعل مع أحداث لوحة المفاتيح
pause (توقّف) قيمة منطقية "hover" يوقف التدوير إن كانت القيمة تساوي "hover", عند الحدث mouseenter (مرور المؤشّر على الدوّار) ويعود إلى التدوير عند وقوع الحدث mouseleave (تراجع المؤشّر عن الدوّار). إنْ كانت القيمة false فإن حومان المؤشّر على الدوّار لن يجعله يتوقّف.

بالنسبة للأجهزة التي تعمل باللمس فإن القيمة "hover" ينتُج عنها توقّف الدوّار عند الحدث touchend (انتهاء المستخدم التفاعل مع الدوّار) لمجاليْن، ثم يواصل. يُرجى ملاحظة أنّ هذا السلوك يعمل إضافةً إلى سلوك المؤشّر المذكور أعلاه.

ride (تدوير) سلسلة محارف false يشغّل الدوّار تلقائيًّل بعد أن يمرّر المستخدم يدويًّا العنصُر الأوّل. إنْ كانت القيمة تساوي "carousel" فهذا يدلّ على تشغيل الدوّار تلقائيًّا مع تحميل الصفحة.
wrap (التفاف) قيمة منطقيّة true إن كان يتوجّب تشغيل الدوّار باستمرار أم لا.
touch قيمة منطقيّة true إن كان يتوجّب دعم تفاعلات الانتقال يمين/يسار على شاشات اللمس.

التوابع

تنبيه: التوابع غير المتزامنة والانتقالات

توابع واجهة التطبيقات جميعها غير متزامنة وتشغّل انتقالًا. تعود هذه التوابع لشيفرة الاستدعاء مباشرةً بعد بدء الانتقال، لكن قبل أن ينتهي. علاوةً على ذلك، يُتجاهل استدعاء تابع على مكوِّن في طور الانتقال.

راجع توثيق JavaScript في Bootstrap للمزيد من المعلومات.

‎.carousel(options)‎‎

يستهلّ الدوّار بكائن خيّارات اختيّاري ويبدأ الانتقال بين العناصر.

$('.carousel').carousel({
  interval: 2000
})

‎.carousel('cycle')‎‎

الانتقال بين عناصر الدوّار من اليسار إلى اليمين.

‎.carousel('pause')‎‎

يوقِف الدوّار عن الانتقال بين العناصر.

‎.carousel(number)‎‎

ينقُل الدوّار إلى شريحة معيَّنة (حيث number يمثّل ترتيبها، الشريحة الأولى ذات ترتيب 0). يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف (أي قبل وقوع الحدث slid.bs.carousel).

‎.carousel('prev')‎‎

يننقل إلى الشريحة السابقة. يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف (أي قبل وقوع الحدث slid.bs.carousel).

‎.carousel('next')‎‎

يننقل إلى الشريحة المواليّة. يعود إلى المستدعِي قبل أن يُعرَض العنصُر المستهدَف (أي قبل وقوع الحدث slid.bs.carousel).

‎.carousel('dispose')‎‎

يحذف عنصُر الدوّار.

الأحداث

يعرض الصنف carousel في إطار العمل Bootstrap حدَثيْن للتعامل مع وظيفة الدوّار. توجد الخاصيّات الإضافيّة التاليّة في كلٍّ من الحدثيْن:

  • direction: اتجاه انتقال الدوّار (إما إلى اليسار "left" أو اليمين "right").
  • relatedTarget: عنصُر كائن المستند DOM الذي ينتقل الدوّار إليه لجعله العنصُر النشط.
  • from: ترتيب العنصُر الحالي.
  • to: ترتيب العنصُر الموالي.

تُطلَق جميع أحداث الدوّار ضمن الدوّار نفسه (بمعنى أنّها من العنصُر <div class="carousel"‎>).

نوع الحدَث الوصف
slide.bs.carousel يُطلَق هذا الحدَث مباشرة استدعاء التابع slide .
slid.bs.carousel يُطلَق هذا الحدث عندما يكمل الدوّار الانتقال إلى الشريحة
$('#myCarousel').on('slide.bs.carousel', function () {
  // افعل شيئا هنا
})

مصادر