parsgreen.com
article

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

javascript

در این مطلب قصد داریم آموزش ایجاد پنلی جمع شونده (CollapsiblePanel) را به کمک جاوا اسکریپت (Javascript) و نرم افزار فوق العاده دریم ویور (Dreamweaver) ارائه کنیم؛ روش های زیادی برای ایجاد جلوه های ویژه و انعطاف پذیر در صفحات وب وجود دارد، از جمله استفاده از کتابخانه های جی کوئری (jquery)، موتولز(mootools)، فایل های فلش (flash) و... اما حرفه ای تر ها در وب، همیشه به دنبال کم حجم ترین و در عین حال سازگارترین کدها هستند! از این رو کدی که در این مطلب قصد معرفی آن را داریم در عین سبکی (کم حجمی) از قابلیت سازگاری خوبی با مرورگرهای استاندارد برخوردار است و در کنار کدهای جاوا اسکریپت قابلیت ایجاد تعییرات سفارشی از طریق ویرایش فایل css نیز وجود دارد که می توانید بر اساس سلیقه خودتان آن را تنظیم کنید.

استفاده از قابلیت Spry در دریم ویور


برای ایجاد این باکس یا پنل از قابلیت Spry در نرم افزار معروف و قدرتمند دریم ویور (Dreamweaver) استفاده کرده ایم با این تفاوت که موارد اضافه و غیر ضروری را جهت کم حجم کردن کد، حذف کرده ایم، نمای کلی کد ما به شکل زیر است:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | ایجاد باکس جمع شونده در دریم ویور</title>
<!-- http://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 را در قسمت head سایت ایمپورت کنید و تکه کد مربوط به متغیر CollapsiblePanel را پس از لایه (div) قرار دهید.
- با ویرایش فایل SpryCollapsiblePanel.css می توانید تنظیمات دلخواه خود را انجام دهید.
- برای ایجاد پنل های مختلف در یک صفحه باید به هر بلاک اصلی یک آی دی اختصاص دهید و در زیر متغیر CollapsiblePanel1 آن آی دی را در متغیری جدید (به فرض CollapsiblePanel2) اضافه کنید.
- برای بدست آوردن کدها و فایل ها، بر روی پیش نمایش کلیک کنید و سپس می توانید از سورس آن استفاده نمائید. 
sectionدسته بندی: آموزش کاربردی » JavaScript
related مطالب بیشتر:
» اعتبار سنجی فرم های وب با جاوا اسکریپت
» نحوه ایجاد دکمه رفتن به بالای صفحه (go to top) با جاوا اسکریپت
» چگونه لوگوی حمایتی برای نمایش در سایت یا وبلاگ بسازیم؟
» کنترل و تغییر اندازه فونت صفحه با جاوا اسکریپت
» ساخت افکت رنگی با جاوا اسکریپت (Javascript)
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 لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

1 × 2
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

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