عمل أكورديون بسيط باستخدام CSS و JQuery

الكاتب: ميساء | في: 10/8/2010 | التصنيف: تطوير مواقع, تطوير واجهة المستخدم | التعليقات: 8

ترجم بإذن من Soh Tanaka المقال الأصلي: اضغط هنا للمشاهدة ترجمة: ميساء

Translated with the permission of Soh Tanaka Original article: Click here to view it Translated by: Maisa

ملاحظة: يستلزم هذا الدرس معرفة متوسطة بكل من الـ CSS و JQuery. للحصول على أفضل النتائج، احرص من فضلك على تعلّم الأساسيات المناسبة قبل محاولة تطبيق هذا الدرس. تعلم بالتدريج كل مرة.

يمكن للأكورديون أن يكون مفيدا بشكل رائع لتنظيم محتوى جيد وذلك عند تصميمه وتنفيذه مع أخذ قابلية الاستخدام في الاعتبار. بما أن الكثيرين قد وجدوا الدرس الذي قمت بشرحه والخاص بالـ toggle مفيدا، فأرغب باستعراض الطريقة التي قمت بواسطتها بعمل أكورديون من الصفر.

إضغط هنا لمشاهدة المثال

الأساس – HTML

شفرتنا بسيطة جدا وهي عبارة عن وسم <h2> متبوع مباشرة بوسم <div>. سيكون وسم الـ <h2> عبارة عن ترويسة عنصر الأكورديون وسنستخدم هذا ليكون الـ trigger الخاص بنا باستخدام الـ jQuery في حين سيكون وسم <div> هو ما نقوم بتحريكه إلى الأعلى والأسفل وذلك لعرض محتوياته.

<h2 class="acc_trigger"><a href="#">Web Design &amp; Development</a></h2>
<div class="acc_container">
<div class="block">
	<!--Content Goes Here--></div>
</div>

التنسيق باستخدام الـ CSS

هناك أمران يجب الانتباه إليهما في التنسيق.

  • استخدام عرض ثابت في .acc_container (لا يمكن له أن يكون بصيغة % أو em) فهذا يمنع أي مشكلة في الـ JQuery حيث يقوم بالقفز أوالتخطي حين ينزلق الأكورديون للأسفل (حين يصل القاع مباشرة). قمت بالبحث عن حل لهذه المشكلة ووجدت البعض ينصح بتحديد الطول عند استخدام الـ JQuery ولكني وجدت الحل الذي طبقته أكثر فعالية وبساطة.
  • أضف padding لوسم الـ div المضمّن في .acc_container حيث يمنع هذا مشكلة أخرى من الظهور حيث يتم عمل animation للـ padding عندما فتح وإغلاق الأكورديون.
h2.acc_trigger {
	padding: 0;	margin: 0 0 5px 0;
	background: url(h2_trigger_a.gif) no-repeat;
	height: 46px;	line-height: 46px;
	width: 500px;
	font-size: 2em;
	font-weight: normal;
	float: left;
}
h2.acc_trigger a {
	color: #fff;
	text-decoration: none;
	display: block;
	padding: 0 0 0 50px;
}
h2.acc_trigger a:hover {
	color: #ccc;
}
h2.active {background-position: left bottom;}
.acc_container {
	margin: 0 0 5px; padding: 0;
	overflow: hidden;
	font-size: 1.2em;
	width: 500px;
	clear: both;
	background: #f0f0f0;
	border: 1px solid #d6d6d6;
	-webkit-border-bottom-right-radius: 5px;
	-webkit-border-bottom-left-radius: 5px;
	-moz-border-radius-bottomright: 5px;
	-moz-border-radius-bottomleft: 5px;
	border-bottom-right-radius: 5px;
	border-bottom-left-radius: 5px;
}
.acc_container .block {
	padding: 20px;
}

الخطوة الثالثة: تجهيز الـ jQuery

للأشخاص الذين ليسوا معتادين على استخدام مكتبة الـ Jquery، تفقد موقعها أولا وخذ فكرة عن كيفية عمل هذه المكتبة. كما قمت بمشاركة بعض الحيل التي صادفتها والتي يمكنك الاطلاع عليها أيضا.

الخطوة الابتدائية- قم باستدعاء ملف الـ jQuery

يمكنك أن تختار بين تحميل ملف الـ jQuery من الموقع الخاص به أو بإمكانك استخدام هذا الملف الموجود على جوجل:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js" type="text/javascript"><!--mce:0--></script>

قم بفتح وسم <script> جديد بعد السطر الذي قمت فيه باستدعاء مكتبة الـ jQuery وابدأ شفرتك البرمجية باستخدام الحدث $(document).ready. يسمح هذا الحدث لكود الـ jQuery بالعمل في نفس اللحظة التي يصبح فيها الـ DOM جاهزا للمعالجة. الكود الذي ستقوم بكتابته في الخطوات القليلة التالية يجب أن يكون موجودا داخل الحدث التالي:

$(document).ready(function() {
	//Code goes here
});

الخطوة الرابعة: إطلاق الكود إلى الحياة- jQuery

يحتوي السكريبت التالي على تعليقات توضح أحداث الـ jQuery التي سيتم تنفيذها.

//Set default open/close settings
$('.acc_container').hide(); //Hide/close all containers
$('.acc_trigger:first').addClass('active').next().show(); //Add "active" class to first trigger, then show/open the immediate next container
 
//On Click
$('.acc_trigger').click(function(){
	if( $(this).next().is(':hidden') ) { //If immediate next container is closed...
		$('.acc_trigger').removeClass('active').next().slideUp(); //Remove all "active" state and slide up the immediate next container
		$(this).toggleClass('active').next().slideDown(); //Add "active" state to clicked trigger and slide down the immediate next container
	}
	return false; //Prevent the browser jump to the link anchor
});

طريقة العمل- ما الذي يحدث هنا؟

  • أولا قم بضبط الإعدادات الأساسية: قم بفتح الأكورديون الأول وأضف الحالة الفعالة.
  • عند الضغط: قم بمعرفة إن كان عنصر الأكورديون الذي تم الضغط عليه مفتوحا أو مغلقا.
  • إذا ما كان العنصر الذي تم اختياره “مختفيا” (مغلقا) فإذن..
  • لكل عناصر الأكورديون- قم بإزالة كل الأصناف “الفعالة” وعمل slide up لكل العناصر التالية في .acc_container
  • عند الضغط على $(this)، قم بإضافة “الحالة الفعالة” وعمل slide down للعنصر التالي في .acc_container

ساعدنا على الإنتشار بمشاركتك هذه المقالة مع الآخرين

Bookmark and Share

مصطلحات ذات الصلة: ، ، ،

عن الكاتب

ميساء

قيد التحديث.

عدد التعليقات: 8

  1. التعليق رقم: 1 عبد الهادي اطويل في 10/08/2010، الساعة 18:51

    السلام عليكم ورحمة الله وبركاته..
    مجهود قيم هذا الذي تقومين به أختي الكريمة ميساء، ألا وهو ترجمة دروس قيمة من مدونات ومواقع غربية رائدة، والجميل أن الترجمة تتم بطلب إذن، كما إنك تحرصين على اختيار الأفضل، فجزاك الله عنا كل خير..
    لكن لي اقتراح أو ملاحظة: ألا ترين أنه كان سيكون من الأفضل لو أن الترجمة تكون كاملة حتى للدرس؟ بمعنى أن يتم تعريب المثال أيضا الموجود في التطبيق، وبالتالي سيكون السهل في أحيان كثيرة على كل صاحب موقع عربي معارفه لا تكفي ليعمل على تعريب مثل هذه الإضافات، سيكون من السهل عليه إضافتها حينها وهي معربة، وطبعا كل ذلك بإذن من صاحب الدرس الأصلي كما جرت به العادة..
    أرجو لك التوفيق، ومني لك أرق تحية..

    رد على التعليق

    • التعليق رقم: 2 ميساء في 11/08/2010، الساعة 15:28

      عبد الهادي

      وعليكم السلام ورحمة الله وبركاته
      شكرا لك على مديحك، وأظن بأنه يجب أن تشكر كريم طارق صاحب المدونة لأنه هو من يتكفل باختيار المواضيع ومراسلة أصحاب الشأن فيما يتلخص عملي في الترجمة والتدقيق.

      حقيقة شكرا للنقطة التي نبهتني إليها ولكن لم أفهم تماما قصدك بالتعريب؟ هل
      تعني تعريب التعليقات داخل الكود مثلا أو ماذا تعني تماما؟

  2. التعليق رقم: 3 هيبو في 10/08/2010، الساعة 20:43

    صحيح لتعم الفائدة اكثر
    كما شاركي بالكودات الجيدة في موقع setcode.net لاثراء المكتبة العربية تقنيا
    كنت هنا سلام

    رد على التعليق

    • التعليق رقم: 4 ميساء في 11/08/2010، الساعة 15:30

      هيبو

      شكرا على الموقع سأحاول الادراج هناك إن اتسع وقتي لذلك
      مرحبا بك دائما.

  3. التعليق رقم: 5 عبد الهادي اطويل في 18/08/2010، الساعة 01:40

    أهلا أختي الكريمة ميساء من جديد..
    ما قصدته هو أن يكون المثال معربا، أي تلك التبويبات وصفحة المثال كلها معربية، فبدل أن يقتصر الأمر على المثال الأصلي والاكتفاء بترجمة الدرس، سيكون أفضل بكثير تعريب المثال نفسه، ليسهل الاستفادة من الإضافة في موقع عربي لمن أراد ومن دون عناء..
    بالنسبة لمسألة تعريب التعليقات داخل الكود ففي الواقع لم تخطر على بالي لكنني أراها فكرة جيدة أيضا ^_^
    طبعا الشكر الجزيل دوما للأخ الكريم كريم طارق على اختياراته ومجهوداته، ولك ولكل قلم مبدع هنا..
    مني لكم أرق تحية..

    رد على التعليق

  4. التعليق رقم: 6 إبراهيم قاسم في 28/08/2010، الساعة 15:15

    جميل جدا بل رائعه

    كنت أبحث عن هذه الطريقة

    وها أنا قد وجدتها

    جاري التجربة

    رد على التعليق

  5. التعليق رقم: 7 رضا الصنهاجي في 22/09/2011، الساعة 20:17

    بارك الله فيك
    درس رائع
    شكرا لك أختي

    رد على التعليق

  6. التعليق رقم: 8 arwa في 02/12/2011، الساعة 04:22

    بارك الله فيك انا لم فاهم كثيرا لاني اول مرة استخدم jQuery عفوا لو تعرفو درس يشرح كيفية تحميل مكتبتها افيدوني به وشكرا

    رد على التعليق