ایجاد پنل جمع شونده با جاوا اسکریپت و فریم ورک Spry

از جمله امکانات مورد نیاز در طراحی رابط کاربری سایت ها و وبلاگ ها پنل های جمع شونده (Collapsible Panel) هستند که می توان از آنها برای نمایش امکاناتی نظیر منوی سایت یا دسته بندی محتوای طولانی و مواردی از این دست استفاده کرد، روش ایجاد این پنل ها نیز بسته به نیاز و هدف برنامه نویس صفحه وب می تواند متفاوت باشد از جمله استفاده از کتابخانه جاوا اسکریپتی جی کوئری (jQuery)، کتابخانه موتولز (Mootools)، استفاده از کدها و توابع خودنوشت و... به هر صورت در این مطلب قصد داریم آموزش ایجاد پنل جمع شونده را به کمک جاوا اسکریپت (JavaScript) و فریم ورک Spry (که در برخی نسخه های برنامه ادوبی دریم ویور (Adobe Dreamweaver) نیز استفاده شده) ارائه کنیم، کد ارائه شده در این مطلب در عین سبکی (کم حجمی) از قابلیت سازگاری خوبی با مرورگرهای استاندارد برخوردار است و در کنار کدهای جاوا اسکریپت قابلیت ایجاد تغییرات سفارشی از طریق ویرایش فایل CSS نیز وجود دارد که می توانید بر اساس سلیقه خودتان آن را تنظیم کنید.
استفاده از فریم ورک Spry برای ایجاد پنل جمع شونده
Spry عنوان فریم ورک جاوا اسکریپتی است که توسط شرکت ادوبی (Adobe) به صورت متن باز (Open-source) توسعه یافته، از این فریم ورک می توان در ایجاد امکانات مورد نیاز در طراحی رابط کاربری صفحات وب استفاده کرد که یکی از این امکانات می تواند پنل های جمع شونده یا به اصطلاح Collapsible Panel باشد، در نمونه کد زیر نحوه ایجاد دو پنل جمع شونده به کمک این فریم ورک را ملاحظه می کنید:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | ایجاد پنل جمع شونده با فریم ورک Spry</title>
<!-- Webgoo.ir -->
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
</style>
<script src="SpryAssets/SpryCollapsiblePanel.js" type="text/javascript"></script>
<link href="SpryAssets/SpryCollapsiblePanel.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="CollapsiblePanel1" class="CollapsiblePanel">
<div class="CollapsiblePanelTab">منو</div>
<div class="CollapsiblePanelContent">نمایش محتوای شما!</div>
</div>
<div id="CollapsiblePanel2" class="CollapsiblePanel">
<div class="CollapsiblePanelTab">منو</div>
<div class="CollapsiblePanelContent">نمایش محتوای شما!</div>
</div>
<script type="text/javascript">
var CollapsiblePanel1 = new Spry.Widget.CollapsiblePanel("CollapsiblePanel1");
var CollapsiblePanel2 = new Spry.Widget.CollapsiblePanel("CollapsiblePanel2");
</script>
</body>
</html>
پیش نمایشتوضیح:
- به محل قرار گیری فایل ها و تگ های جاوا اسکریپت دقت کنید، فایل SpryCollapsiblePanel.js و SpryCollapsiblePanel.css را در قسمت head صفحه ایمپورت کرده و تکه کد مربوط به اسکریپت (تعریف متغیر CollapsiblePanel و فراخوانی متد) را پس از تگ div اصلی پنل قرار دهید.
- با ویرایش فایل SpryCollapsiblePanel.css می توانید تنظیمات ظاهری و استایل دلخواه خود را اعمال کنید.
- برای ایجاد پنل های مختلف در یک صفحه باید ابتدا به هر بلاک اصلی div، یک آی دی اختصاص دهید سپس در قسمت اسکریپت در زیر متغیر CollapsiblePanel1 آن آی دی را در متغیری جدید (به فرض CollapsiblePanel2) اضافه کنید (در نمونه کد دو پنل ایجاد شده که با پیروی از ترتیب شماره گذاری ها می توان به هر تعداد پنل در صفحه ایجاد کرد).
دانلود فایل های پنل جمع شونده با Spry
برای بدست آوردن نمونه سورس کد و فایل JS و CSS پنل، می توانید بر روی لینک پیش نمایش (در بالا) کلیک کرده سپس از سورس کد صفحه استفاده نمائید، همچنین کل فایل ها به صورت یکجا از لینک زیر قابل دریافت است:
دانلود فایل های پنل جمع شونده با Spry

اعتبارسنجی فرم های وب با جاوا اسکریپت (JavaScript)
ساخت پنل چند سربرگی (Tabbed Panel) با جاوا اسکریپت و CSS
چگونه لوگوی حمایتی برای نمایش در سایت یا وبلاگ بسازیم؟
کنترل و تغییر اندازه فونت صفحه با جاوا اسکریپت
ساخت افکت رنگی با جاوا اسکریپت (JavaScript)


Spry.Widget.CollapsiblePanel.prototype.onTabClick = function(a)
{
if (this.isOpen())
this.close();
else
{
CollapsiblePanel1.close();
CollapsiblePanel2.close();
CollapsiblePanel3.close();
CollapsiblePanel4.close();
CollapsiblePanel5.close();
CollapsiblePanel6.close();
CollapsiblePanel7.close();
CollapsiblePanel8.close();
this.open();
}
this.focus();
return this.stopPropagation(a);
};
ممنون از مطالب خوبتون
هيچ جا متغير يا نامي مثل CollapsiblePanel نيست
چطوری میتونم منوها رو اضافه کنم بطوری که مثل دو تای اولی باز و بسته بشه
اخه الان ساختم ولی باز و بسته نمیشن
TNX
ولی اگر کلید منو را زیر قسمت باز شونده بگذاریم کار نمیکند
من یه سوال داشتم ، چطور میتونم وقتی Combobox رو انتخاب میکنم مثلا وقتی گزینه اول باشه یه عنصری رو مخفی کنه و دومی نمایش بده ، میشه کمکم کنین استاد ؟
<script type="text/javascript">
function changeIt(value, num){
//بستن تمام باکس ها
for(var i = 1; i <= num; i++){
document.getElementById('box-' + i).style.display = 'none';
}
//نمایش انتخاب شده
document.getElementById('box-' + value).style.display = 'block';
}
</script>
<select onchange="changeIt(this.value, 3);">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<div id="box-1">متن 1</div>
<div id="box-2">متن 2</div>
<div id="box-3">متن 3</div>
استاد ببخشید من این کد رو می خواستم استفاده کنم جوری که مثلا چند تا باکس باشه . بعد شما گفتین که آیدیش باید تغییر کنه فقط و مثلا 1 و 2 هست تو باکس بعدی بشه 3 و 4 .
این کد منو یه نگاه بندازین خواهشا ببینید باید چی کار کنم!
<?php
if (mysql_num_rows($man) > 0)
{
$i=0 ;
$j= 1 ;
while ($row_manage = mysql_fetch_array($man))
{
$matn .= '
<div class="div">
<div class="title_s">
<div class="date_sms"> 1392/05/27 </div>
<div class="title_sms">'.$row_manage['subject'].' </div>
</div>
<div class="line"> </div>
<br />
<br />
'.$row_manage['description'].'
<div id="CollapsiblePanel1" class="div2">
<a class="CollapsiblePanelTab">ادامه مطلب</a>
<div class="div1">
<br />
<br />
'.$row_manage['con_description'].'
</div>
</div>
</div>
<script type="text/javascript">
var CollapsiblePanel'.$i.' = new Spry.Widget.CollapsiblePanel("CollapsiblePanel'.$i.'",{contentIsOpen:false, openClass:"CollapsiblePanelClose"});
var CollapsiblePanel'.$j.' = new Spry.Widget.CollapsiblePanel("CollapsiblePanel'.$j.'");
</script>
' ;
$i = $i + 2 ;
$j = $i + 1 ;
}
}
?>
<?php
if (mysql_num_rows($man) > 0)
{
$i=1 ;
while ($row_manage = mysql_fetch_array($man))
{
$matn .= '<div class="div">
<div class="title_s">
<div class="date_sms"> 1392/05/27 </div>
<div class="title_sms">'.$row_manage['subject'].' </div>
</div>
<div class="line"> </div>
<br />
<br />
'.$row_manage['description'].'
<div id="CollapsiblePanel'. $i .'" class="div2">
<a class="CollapsiblePanelTab">ادامه مطلب</a>
<div class="div1">
<br />
<br />
'.$row_manage['con_description'].'
</div>
</div>
</div>';
if($i <= 1){
$matn .= '<script type="text/javascript">';
}
$matn .= 'var CollapsiblePanel'.$i.' = new Spry.Widget.CollapsiblePanel("CollapsiblePanel'.$i.'",{contentIsOpen:false, openClass:"CollapsiblePanelClose"});';
if($i == mysql_num_rows($man)){
$matn .= '</script>';
}
$i++;
}
}
?>
نکته: کد تست نشده اما قاعدتا باید طبق چنین الگویی خروجی مورد نظر را چاپ کنید.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.