ایجاد پنل جمع شونده با جاوا اسکریپت و فریم ورک 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) و PHP
نمایش کادر پیام شناور در سایت و وبلاگ با جاوا اسکریپت
ساخت دکمه رفتن به بالای صفحه (Scroll to Top) با جاوا اسکریپت
ساخت پنل چند سربرگی (Tabbed Panel) با جاوا اسکریپت و CSS
چگونه لوگوی حمایتی برای نمایش در سایت یا وبلاگ بسازیم؟
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
دست شما درد نکنه
در قسمت پیش نمایش من شاهد باز شدن منو ها بودم اما با نوشتن خودم نمیشه
حتی کدهای شما رو کپی و پیست هم کردم و جواب نمیده چرا ؟
با تشکر از مطالب عالی و اموزنده شما
فایل JS:
http://webgoo.ir/example/javascript/SpryAssets/SpryCollapsiblePanel.js
فایل CSS:http://webgoo.ir/example/javascript/SpryAssets/SpryCollapsiblePanel.css
من کد نویسی وارد نیستم ولی کارهایی که گفتید انجام دادم کد جاوا اسکریپت را نمی دونم کجا و چطوری ایمپورت کنم.
پشت سر هم با کد بعدی که مربوط به فایلهای اصلی بود داخل قسمت منبع ریختم ولی نشد
دوست عزیز ممکنه بفرمایید چطور میشه تعیین کرد در ابتدای کار، کدوم پنل باز و کدوم پنل بسته کرد؟
طوری که چند تا پنل موجود بسته و تنها یکی باز باشه و سپس کاربر پنل دلخواه خود رو باز یا بسته کنه.
ممنون
<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 مربوط به دکمه جهت نمای بالا است.
کامل و جامع گفتید
متشکرم
خسته نباشید
من یه سوال داشتم . چطوری میشه با کد جاوا همین طوری با کلیک بر روی منوی مورد نظر صفحه ای کوچک تر از صفحه اصلی توی همون صفحه اصلی باز بشه که وقتی باز شد صفحه اصلی تار شود (غیر فعال) که با گذاشتن دکمه ای خروج توی صفحه دوم، از صفحه دوم بیایم بیرون و صفحه اصلی دوباره فعال بشه
می خوام زمانی که بر روی منوی اولی کلیک شد منو باز شود و بعد از دو ثانیه منو دوم بسته شود خواهش می کنم کمکم کنید خیلی بهش نیاز دارم
بی نهایت از شما بابت سایت خوبتون سپاسگذارم
http://webgoo.ir/example/javascript/SpryAssets/SpryCollapsiblePanel.css
لطفا کمکم کنید که چطور میتونم با استفاده از کدهای جاوا و css یک tree menu در صفحه وب در زیر منو ابشاری ام ایجاد کنم.
لطفا کدهاش رو و اینکه در کدوم قسمت برنامه dreamweaver باید بنویسم راهنمایم کنید.
با سپاس فراوان............
من در صفحه اصلی وب یه منوی کشویی نوشتم می خوام در زیر منوی کشویی در سمت راست صفحه اصلی وب چند ارگومان یا عنوان قرار بدم که وقتی روی یکی از این عنوان ها میرم زیر منوهاش رو با اتصال خط چین به والدش نشان بده و برای بار دوم که روی عنوان والد میرم زیر مجموعه اش جمع بشه. و اینکه کد منو درختی رو در کجا ذخیره کنم؟
و یه سوال دیگر چطور می تونم در صفحه اصلی وبم دکمه راست کلیک رو میزنم صفحه ام 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 هست . ایشالله که منظورم رو متوجه شدین ! میشه یه توضیح بدین که چی کار کنم ؟
بازم ممنونم از سایت بسیار عالیتون
استاد ببخشید من این کد رو می خواستم استفاده کنم جوری که مثلا چند تا باکس باشه . بعد شما گفتین که آیدیش باید تغییر کنه فقط و مثلا 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++;
}
}
?>
نکته: کد تست نشده اما قاعدتا باید طبق چنین الگویی خروجی مورد نظر را چاپ کنید.من یه سوال داشتم ، چطور میتونم وقتی 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>
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.