i
در حال برنامه نویسی و آماده سازی نسخه جدید «وبگو» هستیم، در این نسخه قابلیت ها و ظاهر سایت به کلی متفاوت و کاملتر خواهد بود، این فرآیند زمانبر و از مدتی پیش شروع شده و همچنان ادامه دارد، روند پیشرفت پروژه در این قسمت به صورت درصدی مشخص است و به تناوب به روزرسانی می شود.
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشند که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
article

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

javascript

از جمله امکانات مورد نیاز در طراحی رابط کاربری سایت ها و وبلاگ ها پنل های جمع شونده (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
sectionدسته بندی: آموزش کاربردی » JavaScript
related مطالب بیشتر:
» ساخت منوی آکاردئونی با جاوا اسکریپت و CSS
» نمایش پیام صفحه در حال بارگذاری با جاوا اسکریپت
» چگونه لوگوی حمایتی برای نمایش در سایت یا وبلاگ بسازیم؟
» نمایش کادر پیام شناور در سایت و وبلاگ با جاوا اسکریپت
» اعتبار سنجی فرم های وب با جاوا اسکریپت
commentنظرات (۲۷ یادداشت برای این مطلب ارسال شده است)
نویسنده: س
زمان: ۱۸:۵۲:۰۸ - تاریخ: ۱۳۹۱/۱۲/۲۱
خیلی جالب بود.
دست شما درد نکنه
نویسنده: amirchermahini
زمان: ۱۶:۴۶:۲۵ - تاریخ: ۱۳۹۱/۱۲/۲۶
با سلام و عرض ادب
در قسمت پیش نمایش من شاهد باز شدن منو ها بودم اما با نوشتن خودم نمیشه
حتی کدهای شما رو کپی و پیست هم کردم و جواب نمیده چرا ؟
با تشکر از مطالب عالی و اموزنده شما
پاسخ: 
باید سورس های JS و CSS را نیز در کنار صفحه HTML قرار دهید، برای این کار هم از طریق برنامه دریم ویور و هم از طریق نمونه آنلاین می توانید کدها را ذخیره کنید.
فایل JS:
http://webgoo.ir/example/javascript/SpryAssets/SpryCollapsiblePanel.js
فایل CSS:
http://webgoo.ir/example/javascript/SpryAssets/SpryCollapsiblePanel.css
نویسنده: علی
زمان: ۰۸:۵۰:۴۷ - تاریخ: ۱۳۹۲/۰۱/۱۰
با سلام و تشکر از سایت بسیار خوبتون
من کد نویسی وارد نیستم ولی کارهایی که گفتید انجام دادم کد جاوا اسکریپت را نمی دونم کجا و چطوری ایمپورت کنم.
پشت سر هم با کد بعدی که مربوط به فایلهای اصلی بود داخل قسمت منبع ریختم ولی نشد
پاسخ: 
برای استفاده از اینگونه کدها باید دانش و تجربه اولیه مبانی وب را داشته باشید، به هر صورت کافی است مطابق نمونه ابتدا آنها را آپلود کرده و با جایگزینی آدرس ها، در هر جا از قالب یا مطالب وبلاگ یا سایتتان که امکان پشتیبانی و نمایش کدهای HTML را دارد، آن را قرار دهید.
نویسنده: پوریا
زمان: ۱۹:۵۴:۳۵ - تاریخ: ۱۳۹۲/۰۴/۰۵
با سلام و تشکر بابت این مطلب مفید.
دوست عزیز ممکنه بفرمایید چطور میشه تعیین کرد در ابتدای کار، کدوم پنل باز و کدوم پنل بسته کرد؟
طوری که چند تا پنل موجود بسته و تنها یکی باز باشه و سپس کاربر پنل دلخواه خود رو باز یا بسته کنه.
ممنون
پاسخ: 
سفارشی سازی این کد بر اساس API Spry به راحتی امکان پذیر است، برای حالت مد نظر شما کافی است تنظیمات قسمت زیر را ویرایش:
<script type="text/javascript">
var CollapsiblePanel1 = new Spry.Widget.CollapsiblePanel("CollapsiblePanel1");
var CollapsiblePanel2 = new Spry.Widget.CollapsiblePanel("CollapsiblePanel12");
</script>
و هر پنلی که می خواهید در ابتدا بسته باشد را به روش نمونه زیر تغییر دهید:
<script type="text/javascript">
var CollapsiblePanel1 = new Spry.Widget.CollapsiblePanel("CollapsiblePanel1",{contentIsOpen:false, openClass:"CollapsiblePanelClose"});
var CollapsiblePanel2 = new Spry.Widget.CollapsiblePanel("CollapsiblePanel2");
</script>
در اینجا ما پنل اول را به صورت پیش فرض بسته ایم.
تنظیمات قابل اعمال:
- closedClass با مقدار نام یک کلاس (مقدار پیش فرض: null)
- contentIsOpen با مقدار true یا flase (مقدار پیش فرض: true)
- duration با مقدار هزام ثانیه (مقدار پیش فرض: 500)
- enableAnimation با مقدار true یا false (مقدار پیش فرض: true)
- focusedClass با مقدار نام یک کلاس (مقدار پیش فرض: null)
- hoverClass با مقدار نام یک کلاس (مقدار پیش فرض: null)
- openClass با مقدار نام یک کلاس (مقدار پیش فرض: null)
- enableKeyboardNavigation با مقدار true یا false (مقدار پیش فرض: true)
- openPanelKeyCode با مقدار عدد کلیدهای صفحه کلید (مقدار پیش فرض: number)
به طور مثال عدد 40 مربوط به دکمه جهت نمای پائین است.
- closePanelKeyCode با مقدار عدد کلیدهای صفحه کلید (مقدار پیش فرض: number)
به طور مثال عدد 38 مربوط به دکمه جهت نمای بالا است.
نویسنده: پوریا
زمان: ۱۹:۳۰:۵۹ - تاریخ: ۱۳۹۲/۰۴/۰۶
یک دنیا ممنون
کامل و جامع گفتید
متشکرم
نویسنده: الهام
زمان: ۱۵:۲۴:۱۴ - تاریخ: ۱۳۹۲/۰۴/۱۴
سلام
خسته نباشید
من یه سوال داشتم . چطوری میشه با کد جاوا همین طوری با کلیک بر روی منوی مورد نظر صفحه ای کوچک تر از صفحه اصلی توی همون صفحه اصلی باز بشه که وقتی باز شد صفحه اصلی تار شود (غیر فعال) که با گذاشتن دکمه ای خروج توی صفحه دوم، از صفحه دوم بیایم بیرون و صفحه اصلی دوباره فعال بشه
پاسخ: 
این کار نیاز به کدنویسی پیشرفته و آموزشی جداگانه دارد، شاید نمونه های آن در وب در قالب جی کئوری وجود داشته باشد که باید جستجو کنید.
نویسنده: ابوالفضل
زمان: ۱۶:۲۴:۳۱ - تاریخ: ۱۳۹۲/۰۴/۱۸
سلام من میخوام دو منو باشد اولی بسته باشد و دومی باز باشد.
می خوام زمانی که بر روی منوی اولی کلیک شد منو باز شود و بعد از دو ثانیه منو دوم بسته شود خواهش می کنم کمکم کنید خیلی بهش نیاز دارم
بی نهایت از شما بابت سایت خوبتون سپاسگذارم
پاسخ: 
منوی مد نظرتان را یا باید در وب جستجو کنید و یک نمونه آماده پیدا کنید یا اینکه آن را بنویسید، متاسفانه به دلیل کمبود فرصت امکان نوشتن آن وجود ندارد.
نویسنده: fatima
زمان: ۱۱:۰۸:۱۰ - تاریخ: ۱۳۹۲/۰۵/۰۳
سلام. من چطور میتونم فایل CSS رو تغییر بدم. آخه همچین فایلی برای دانلود نیست
پاسخ: 
آدرس فایل CSS:
http://webgoo.ir/example/javascript/SpryAssets/SpryCollapsiblePanel.css
نویسنده: sama
زمان: ۱۴:۳۴:۱۶ - تاریخ: ۱۳۹۲/۰۵/۱۶
سلام خسته نباشید
لطفا کمکم کنید که چطور میتونم با استفاده از کدهای جاوا و css یک tree menu در صفحه وب در زیر منو ابشاری ام ایجاد کنم.
لطفا کدهاش رو و اینکه در کدوم قسمت برنامه dreamweaver باید بنویسم راهنمایم کنید.
با سپاس فراوان............
پاسخ: 
هر چند دقیقا نمی دانیم چه نوع منوی درختی مد نظر شما است، اما در این خصوص کدی آماده در اختیار نداریم، چند نوع مختلف منو در سایت آموزش داده شده، کافی است عبارت "منو" را در قسمت جستجو وارد کنید.
نویسنده: sama
زمان: ۰۰:۲۳:۰۴ - تاریخ: ۱۳۹۲/۰۵/۱۷
اجازه بدید سوالم رو به صورت دیگر بیان کنم
من در صفحه اصلی وب یه منوی کشویی نوشتم می خوام در زیر منوی کشویی در سمت راست صفحه اصلی وب چند ارگومان یا عنوان قرار بدم که وقتی روی یکی از این عنوان ها میرم زیر منوهاش رو با اتصال خط چین به والدش نشان بده و برای بار دوم که روی عنوان والد میرم زیر مجموعه اش جمع بشه. و اینکه کد منو درختی رو در کجا ذخیره کنم؟
و یه سوال دیگر چطور می تونم در صفحه اصلی وبم دکمه راست کلیک رو میزنم صفحه ام right click menu باشه؟
شدیدا به راهنمای شما استاد بزرگوار احتیاج دارم لطف کنید کمکم کنید
سپاسگذارم
پاسخ: 
در مورد منوی درختی:
در حال حاضر کدی آماده برای این نوع منو در اختیار نداریم (شاید در آینده آموزشی درباره آن در سایت منتشر شود)، اما اگر در وب همان عنوان "tree menu" را جستجو کنید، نمونه های زیادی پیدا خواهید کرد، منظورتان از ذخیره کد منو احتمالا روش درج آن است، باید فایل های CSS یا JS منو را در یک دایرکتوری یا در یک سایت آپلود کرده و در صفحه خود آنها را وارد کنید، حتی می توانید به صورت مستقیم تمام کدها را در یک صفحه داشته باشید.
در مورد سوال دوم:
برای این کار باید منوی پیش فرض مرورگر را غیر فعال و محتویات مورد نظر خودتان را چاپ کنید:
<script type="text/javascript">
if(document.addEventListener){
document.addEventListener('contextmenu', function(e){
document.write('کد منوی شما در حالت راست کلیک');
e.preventDefault();
}, false);
}
else{
document.attachEvent('oncontextmenu', function(){
document.write('کد منوی شما در حالت راست کلیک');
window.event.returnValue = false;
});
}
</script>
البته غیر فعال کردن تنظیمات اولیه مرورگر به هیچ وجه توصیه نمی شود و در وب معمول نیست (در وب بر خلاف نرم افزارهای تحت ویندوز و...، با محدودیت های خاصی روبرو هستیم و تنها در چارچوب استانداردهای فراگیر بین مرورگرهای مختلف باید امکانات یک صفحه وب تعریف شود، هر امکانی را نمی توان به راحتی و به درستی ایجاد کرد).
نویسنده: مسعود
زمان: ۱۱:۳۶:۱۶ - تاریخ: ۱۳۹۲/۰۵/۲۴
با سلام .
استاد ببخشید . این کدی که گذاشتین رو من می خوام مثلا رو دکمه ی ادامه مطلب پیاده کنم که وقتی ادامه مطلب رو میزنیم بقیه باز بشه . مشکلی که وجود داره اینه که من می خوام فقط رو لینک ادامه مطلب که کلیک می کنی این اتفاق میفته و این کد برای یه div هست . ایشالله که منظورم رو متوجه شدین ! میشه یه توضیح بدین که چی کار کنم ؟
پاسخ: 
کل محتوایی که باید به صورت باکس باشد را درون یک بلاک CollapsiblePanel قرار دهید، قسمت لینک را درون CollapsiblePanelTab و قسمت ادامه مطلب را در بخش CollapsiblePanelContent، بدین ترتیب با کلیک بر روی لینک، محتوا نمایش داده می شود، برای تغییر جلوه ظاهری نیز از استایل CSS استفاده کنید.
نویسنده: مسعود
زمان: ۰۱:۳۶:۳۷ - تاریخ: ۱۳۹۲/۰۵/۲۵
با سلام مجدد . آقا تبریک میگم به این سایت بسیار خوبتون . واقعا خیلی عالیه هر چی بگم کم گفتم . فقط اگه مبحث جی کوئری رو هم ارئه بدین که دیگه بی نظیر میشه .
بازم ممنونم از سایت بسیار عالیتون
پاسخ: 
در کوتاه مدت امکانپذیر نیست، اما شاید در آینده بخشی را به این فریم ورک اختصاص دهیم.
نویسنده: مسعود
زمان: ۲۱:۳۶:۳۱ - تاریخ: ۱۳۹۲/۰۵/۲۸
با سلام .
استاد ببخشید من این کد رو می خواستم استفاده کنم جوری که مثلا چند تا باکس باشه . بعد شما گفتین که آیدیش باید تغییر کنه فقط و مثلا 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 ;
}
}
?>
پاسخ: 
نباید کدها را حساب نشده بنویسید! ابتدا به خروجی مورد انتظار نگاه کنید، در قسمت تب ها نیاز به تکرار بلاک های CollapsiblePanel با شماره id متفاوت دارید، این مورد را می توان در حلقه while خروجی گرفت، اما اگرچه قسمت داخل تگ script باید به همین صورت تکرار شود، اما خود تگ اسکریپت تنها یک بار باید چاپ گردد، لذا باید با شرط در حلقه باشد، نکته دیگر اینکه باید متغیری داشته باشید که در هر دور حلقه تنها یک واحد افزایش پیدا کند:
<?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++;
}
}
?>
نکته: کد تست نشده اما قاعدتا باید طبق چنین الگویی خروجی مورد نظر را چاپ کنید.
نویسنده: مسعود
زمان: ۲۲:۰۹:۵۵ - تاریخ: ۱۳۹۲/۰۵/۲۸
با سلام . ببخشید استاد من اگه خواسته باشم وقتی روی دکمه "منو" کلیک می کنم که صفحه باز و بسته میشه ، وقتی روش کلیک شد (منو) مثلا نوشته منو عوض بشه به یه کلمه دیگه مثلا "باز" چی کار باید بکنم ؟
پاسخ: 
برای این کار باید ابتدا یک id به عنوان منوها اختصاص دهید، سپس با رویدادهایی مانند onclick در جاوا اسکریپت یک تابع را فراخوانی کنید که به فرض با متد innerHTML مقادیر عنوان منو را به صورت داینامیک تغییر دهد، نوشتن این تابع نیاز به صرف مدت زمانی است که متاسفانه به دلیل کمبود فرصت از انجام آن معذوریم.
نویسنده: نیما
زمان: ۲۱:۳۰:۱۷ - تاریخ: ۱۳۹۲/۰۸/۰۶
سلام ، خیلی ممون از سایت خوبتون
من یه سوال داشتم ، چطور میتونم وقتی Combobox رو انتخاب میکنم مثلا وقتی گزینه اول باشه یه عنصری رو مخفی کنه و دومی نمایش بده ، میشه کمکم کنین استاد ؟
پاسخ: 
این مورد را باید با JavaScript کدنویسی کنید، به تگ select رویداد onchange اختصاص دهید و با this.value مقادیر تگ را به عنوان آرگومان به یک تابع بدهید:
<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>
paged صفحه 1 از 2




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

9 × 9
 refresh
آگهی
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...
پرشین آی تی
Persianit.net

آموزش و دانلود پروژه های برنامه نویسی سی شارپ (#C)
سامانه استخدام ایران
Iran-karyab.com

اطلاع رسانی استخدام های معتبر دانلود رایگان نمونه سئوالات