ساخت منوی آکاردئونی با جاوا اسکریپت و CSS

ساخت منوها و باکس های آکاردئونی (accordion) یا به اصطلاح جمع شونده، یکی از قابلیت هایی است که جاوا اسکریپت (JavaScript) و کتابخانه های زیرمجموعه آن مانند جی کئوری (jQuery) در اختیار برنامه نویسان و طراحان وب قرار می دهند، قابلیت تعاملی و زیبایی که این نوع منوها به رابط کاربری (Interface) سایت یا وبلاگ می دهد باعث می شود که خیلی از مدیران وب گرایش به سمت استفاده از آن داشته باشند، البته در این مورد باید همیشه به مقوله سازگاری، سرعت و سبکی صفحات دقت نمود، چرا که هرچند می توانیم جلوه های خیلی خاصی در صفحات وب ایجاد کنیم، اما باید توجه داشت که این جلوه ها سرعت بارگذاری و قابلیت سازگاری سایت یا وبلاگمان را در مرورگرها و سیستم های مختلف تحت تاثیر قرار ندهند، از این رو است که همیشه استفاده از کدهای کم حجم با بیشترین سازگاری توصیه می شود.
منظور از منوی آکاردئون چیست؟
منوی آکاردئونی در واقع برگرفته از نام واژه آکاردئون (accordion) و به معنی یک نوع ساز بادی معروف است، قسمتی از این ساز دارای یک مجاری عبور هوای فنر مانند و پله پله ای است که نوازنده برای نواختن آهنگ باید آن را با دست خود به طور متناوب حرکت دهد، این ساز قدمت زیادی داشته و در خیلی از فیلم ها و سریال ها معمولا به عنوان ساز بینوایان استفاده می شود! به خاطر شباهت این نوع منو با این ساز به آن آکاردئونی می گوییم.
کد جاوا اسکریپت برای ساخت باکس آکاردئونی
همان طور که گفتیم برای ساختن منوها و باکس های آکاردئونی یا به اصلاح جمع شونده، می توان از جاوا اسکریپت استفاده کرد، از این رو در زیر یکی از سبک ترین و در عین حال سازگارترین توابعی که بدین منظور نوشته شده را با هم بررسی می کنیم.
<script type="text/javascript">
//<![CDATA[
var contentHeight = 34;
var TimeToSlide = 300.0;
var openprobox = '';
function runprobox(index){
var divID = "probox" + index + "content";
if(openprobox == divID){
divID = '';
}
setTimeout("animate(" + new Date().getTime() + "," + TimeToSlide + ",'" + openprobox + "','" + divID + "')", 33);
openprobox = divID;
}
function animate(lastTick, timeLeft, closingId, openingId){
var curTick = new Date().getTime();
var elapsedTicks = curTick - lastTick;
var opening = (openingId == '') ? null : document.getElementById(openingId);
var closing = (closingId == '') ? null : document.getElementById(closingId);
if(timeLeft <= elapsedTicks){
if(opening != null){
opening.style.height = contentHeight + 'px';
}
if(closing != null){
closing.style.display = 'none';
closing.style.height = '0px';
}
return;
}
timeLeft -= elapsedTicks;
var newClosedHeight = Math.round((timeLeft/TimeToSlide) * contentHeight);
if(opening != null){
if(opening.style.display != 'block'){
opening.style.display = 'block';
}
opening.style.height = (contentHeight - newClosedHeight) + 'px';
}
if(closing != null){
closing.style.height = newClosedHeight + 'px';
}
setTimeout("animate(" + curTick + "," + timeLeft +",'" + closingId + "','" + openingId + "')", 33);
}
//]]>
</script>
اگرچه درک صحیح عملکرد این کد نیازمند تجربه نسبی و کار با جاوا اسکریپت است، اما بد نیست برای آگاهی بیشتر هم که شده، نگاهی اجمالی به کد بالا داشته باشیم.توضیح:
- در قسمت متغیر contentHeight در ابتدای کد، ارتفاع بلاک محتوا را به پیکسل مشخص می کنیم، این همان بلاکی است که محتویات هر منو را در خود نمایش می دهد.
- در متغیر TimeToSlide میزان زمان (به میلی ثانیه) را برای شروع و پایان انیمیشن تعیین می کنیم، هر چه این زمان بیشتر باشد، سرعت انمیشن کندتر و میزان فرم های بیشتری ایجاد می شود (توصیه می شود مقادیر پیش فرض را تغییر ندهید).
- تابع runprobox در کد بالا، یک عدد به عنوان آرگومان می پذیرد، این عدد در واقع در هنگام فراخوانی تابع (که در ادامه خواهیم دید) برای هر بلاک متفاوت خواهد بود، به این ترتیب تابع قادر خواهد بود تا بلاک هدف را از سایر موارد شناسایی کند.
- setTimeout در توابع بالا نقش یک وقفه را بازی می کند، به این ترتیب که با فراخوانی تابع animate در زمان های متوالی، بین فرم ها وقفه های خیلی کوتاهی ایجاد می شود تا در نهایت حاصل کار به شکل یک انیمیشن به نمایش درآید.
- تابع animate نیز به عنوان موتور کد عمل کرده و با دریافت چهار آرگومان و بررسی آنها، در نهایت انیمیشن را خلق می کند، در این تابع متغیر curTick زمان فعلی، elapsedTicks میزان اختلاف بین آخرین اجرای تابع animate و زمان فعلی و متغیر opening و closing نیز مقادیر id بلاک هدف را در خود دارند.
- همان طور که ملاحظه می کنید تابع animate برای کنترل استایل و ویژگی های css بلاک ها از متد style و object استفاده می کند، به طور مثال opening.style.height ارتفاع بلاک opening را تعیین می کند یا closing.style.display نوع display بلاک closing را مشخص می کند.
نکته: این کد با وجود حجم بسیار کم، تقریبا با تمام مرورگرها سازگار است، از جمله اینترنت اکسپلورر 6 و مابعد، فایرفاکس، گوگل کروم، اپرا، سافاری و...
کد css منوی آکاردئونی
برای اینکه منوهای ما به درستی کار کنند، علاوه بر کد جاوا اسکریپت، به استایل css و کلاس های آن نیازمندیم، بدین منظور استایل زیر را نیز باید در صفحه خود وارد کنیم (به صورت یک فایل خارجی و یا به صورت درون صفحه ای).
<style type="text/css">
.proboxtitle, .proboxcontent, .proboxmain{
position:relative;
}
.proboxtitle{
width:200px;
height:25px;
overflow:hidden;
text-align:right;
display:block;
cursor:pointer;
background-color:#666;
color:#FFF;
direction:rtl;
padding:4px;
text-align:center;
border-bottom:1px dashed #CCC;
}
.proboxcontent{
width:200px;
height:auto;
overflow:hidden;
display:none;
background-color:#F8F8F8;
padding:4px;
direction:rtl;
}
.proboxmain{
border:1px solid #F0F0F0;
width:208px;
}
</style>
همان طور که ملاحظه می کنید، کد css بالا سه کلاس دارد که با آن، ویژگی ها و خواص ظاهری سه بلاک را در صفحه کنترل می کنیم، همچنین برخی موارد در استایل بالا قابل تغییر و برخی نیز به نحوه عملکرد برنامه مربوط بوده و غیر قابل تغییر هستند.نحوه استفاده از منوی آکاردئونی
برای استفاده از کدهای بالا، در نهایت باید منو و باکس ها را در بلاک های div تعریف کنیم، برای نمونه مثال زیر می تواند راهنمای ما باشد.
<div id="proboxmain" class="proboxmain">
<!-- منوی شماره 1 -->
<div class="proboxtitle" onclick="runprobox(1);">
تیتر باکس 1
</div>
<div id="probox1content" class="proboxcontent">
محتوای باکس آکاردئونی 1
</div>
<!-- منوی شماره 2 -->
<div class="proboxtitle" onclick="runprobox(2);">
تیتر باکس 2
</div>
<div id="probox2content" class="proboxcontent">
محتوای باکس آکاردئونی 2
</div>
<!-- منوی شماره 3 -->
<div class="proboxtitle" onclick="runprobox(3);">
تیتر باکس 3
</div>
<div id="probox3content" class="proboxcontent">
محتوای باکس آکاردئونی 3
</div>
<!-- منوی شماره 4 -->
<div class="proboxtitle" onclick="runprobox(4);">
تیتر باکس 4
</div>
<div id="probox4content" class="proboxcontent">
محتوای باکس آکاردئونی 4
</div>
</div>
توضیح:- در مثال بالا، ابتدا یک بلاک اصلی با کلاس و آی دی proboxmain تعریف می کنیم، این بلاک تمام محتوای منوهای ما را در برمی گیرد.
- سپس برای هر منو، یک بلاک با کلاس proboxtitle و به همراه رویداد onclick تعریف می کنیم که تیتر منوها را در خود جای می دهد، این بلاک وظیفه فراخوانی تابع runprobox را دارد و یک عدد به عنوان آرگومان به تابع مذکور ارسال می کند، این عدد باید بین منوهای مختلف متفاوت و یکتا باشد تا برنامه بتواند بلاک مورد نظر را شناسایی کند.
- سپس در بلاک دیگری با آی دی و کلاس proboxcontent محتوای باکس خود را قرار می دهیم، در اینجا باید دقت کنید که برای آی دی، بعد از عبارت probox عدد آرگومان را قرار داده و سپس عبارت content را اضافه کنید، به فرض اگر آرگومان تابع runprobox عدد 3 باشد، آی دی بلاک محتوا باید به صورت probox3content تنظیم شود.
مثال و پیش نمایش آنلاین
برای بررسی و تست برنامه، می توانید از مثال و پیش نمایش آنلاین زیر استفاده کنید.
<!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>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
.proboxtitle, .proboxcontent, .proboxmain{
position:relative;
}
.proboxtitle{
width:200px;
height:25px;
overflow:hidden;
text-align:right;
display:block;
cursor:pointer;
background-color:#666;
color:#FFF;
direction:rtl;
padding:4px;
text-align:center;
border-bottom:1px dashed #CCC;
}
.proboxcontent{
width:200px;
height:auto;
overflow:hidden;
display:none;
background-color:#F8F8F8;
padding:4px;
direction:rtl;
}
.proboxmain{
border:1px solid #F0F0F0;
width:208px;
}
</style>
<script type="text/javascript">
//<![CDATA[
var contentHeight = 34;
var TimeToSlide = 300.0;
var openprobox = '';
function runprobox(index){
var divID = "probox" + index + "content";
if(openprobox == divID){
divID = '';
}
setTimeout("animate(" + new Date().getTime() + "," + TimeToSlide + ",'" + openprobox + "','" + divID + "')", 33);
openprobox = divID;
}
function animate(lastTick, timeLeft, closingId, openingId){
var curTick = new Date().getTime();
var elapsedTicks = curTick - lastTick;
var opening = (openingId == '') ? null : document.getElementById(openingId);
var closing = (closingId == '') ? null : document.getElementById(closingId);
if(timeLeft <= elapsedTicks){
if(opening != null){
opening.style.height = contentHeight + 'px';
}
if(closing != null){
closing.style.display = 'none';
closing.style.height = '0px';
}
return;
}
timeLeft -= elapsedTicks;
var newClosedHeight = Math.round((timeLeft/TimeToSlide) * contentHeight);
if(opening != null){
if(opening.style.display != 'block'){
opening.style.display = 'block';
}
opening.style.height = (contentHeight - newClosedHeight) + 'px';
}
if(closing != null){
closing.style.height = newClosedHeight + 'px';
}
setTimeout("animate(" + curTick + "," + timeLeft +",'" + closingId + "','" + openingId + "')", 33);
}
//]]>
</script>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیرفعال است یا پشتیبانی نمی شود!<br />
</noscript>
<div id="proboxmain" class="proboxmain">
<!-- منوی شماره 1 -->
<div class="proboxtitle" onclick="runprobox(1);">
تیتر باکس 1
</div>
<div id="probox1content" class="proboxcontent">
محتوای باکس آکاردئونی 1
</div>
<!-- منوی شماره 2 -->
<div class="proboxtitle" onclick="runprobox(2);">
تیتر باکس 2
</div>
<div id="probox2content" class="proboxcontent">
محتوای باکس آکاردئونی 2
</div>
<!-- منوی شماره 3 -->
<div class="proboxtitle" onclick="runprobox(3);">
تیتر باکس 3
</div>
<div id="probox3content" class="proboxcontent">
محتوای باکس آکاردئونی 3
</div>
<!-- منوی شماره 4 -->
<div class="proboxtitle" onclick="runprobox(4);">
تیتر باکس 4
</div>
<div id="probox4content" class="proboxcontent">
محتوای باکس آکاردئونی 4
</div>
</div>
<hr />
برای بررسی ویژگی های منو، بر روی یکی از آیتم ها کلیک کنید.
</body>
</html>
پیش نمایشدسته بندی: آموزش کاربردی » JavaScript
برچسب ها: CSS - JavaScript

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


۰۶:۱۲ ۱۴۰۱/۰۱/۲۱
سلام بنده میخوام برای صحفه برند هایم محتوا بصورت کشویی در بالای صحفه باشه چگونه این کار را انجام دهم اسم سایت souket.ir میباشد لطفا راهنمایی کنید
لطفا یک نمونه آنلاین یا اسکرین شات از منظورتان ارسال کنید تا امکان راهنمایی فراهم باشد.
روستازاده
۱۵:۱۵ ۱۴۰۱/۰۱/۱۹
سلام مجدد
به پشتیبانی گفتم درستش کردن اعصابم رو خرد کرده بود تیکت زدم تست کردن و تست لینک شما هم دادم الان پیام دادن و تست کردم دیدم تابع جواب درست برمی گردونه احتمال زیاد تنظیماتی چیزی میخواسته که روی هاست نبوده
دست گل شما هم درد نکنه خیلی زحمتتون دادم انشاءالله که همیشه خدا پشت و پناهتون باشه دیگه کم کم داشت از eu متنفر می شدم :))))
به پشتیبانی گفتم درستش کردن اعصابم رو خرد کرده بود تیکت زدم تست کردن و تست لینک شما هم دادم الان پیام دادن و تست کردم دیدم تابع جواب درست برمی گردونه احتمال زیاد تنظیماتی چیزی میخواسته که روی هاست نبوده
دست گل شما هم درد نکنه خیلی زحمتتون دادم انشاءالله که همیشه خدا پشت و پناهتون باشه دیگه کم کم داشت از eu متنفر می شدم :))))
بسیار خوب، خوشحالیم که مشکل رفع شد :)
میثم
۲۰:۴۴ ۱۴۰۰/۰۵/۲۴
ممنون و متشکرم. عالی بود.
میثم
۲۰:۰۶ ۱۴۰۰/۰۵/۲۳
سلام مجدد
یه سوال دیگه. آیا میشه فلان div رو با ای دی یکتا از طریق آدرس بار نمایش داد یا مخفی کرد؟
مثلاً div داریم با ای دی sss حالا اگه توی ادرس بار عبارت زیر رو وارد کنیم.
یه سوال دیگه. آیا میشه فلان div رو با ای دی یکتا از طریق آدرس بار نمایش داد یا مخفی کرد؟
مثلاً div داریم با ای دی sss حالا اگه توی ادرس بار عبارت زیر رو وارد کنیم.
Site.com/page#sss
Div با ای دی sss نمایش داده بشه و اگه عبارت زیر رو وارد کنیمSite.com/page
Div نمایش داده نشه.با جاوا اسکریپت این کار شدنی است منتها ممکن است نیاز به رفرش صفحه باشد تا مشکل Cache شدن پیش نیاید:
<div id="test">test</div>
<script>
var elm_div = document.getElementById('test');
if(window.location.hash) {
var hash = window.location.hash.substring(1);
if(hash === 'test'){
elm_div.style.display = 'block';
}
} else {
elm_div.style.display = 'none';
}
</script>
میثم
۱۹:۴۴ ۱۴۰۰/۰۵/۲۳
سلام.
چطور میشه منو باز شده رو ذخیره کرد؟
منظورم اینه که فرض کنیم از این چهار تا منوی بازشو، روی دومی کلیک کنیم و باز بشه، حالا اگه صفحه رو رفرش کنیم، منوی دوم به صورت خودکار باز بشه.
چطور میشه منو باز شده رو ذخیره کرد؟
منظورم اینه که فرض کنیم از این چهار تا منوی بازشو، روی دومی کلیک کنیم و باز بشه، حالا اگه صفحه رو رفرش کنیم، منوی دوم به صورت خودکار باز بشه.
برای ذخیره آیتم های فعال منو باید از کوکی در جاوا اسکریپت استفاده کنیم، برای این کار ابتدا کدهای زیر را در قسمت head صفحه درج کنید:
<script>
function setCookie(name, value, days) {
var expires = "";
if(days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; SameSite=Lax; path=/";
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while(c.charAt(0) == ' ') c = c.substring(1, c.length);
if(c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
function eraseCookie(name) {
document.cookie = name + '=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
</script>
در انتهای تابع runprobox قبل از کاراکتر قلاب کد زیر را اضافه کنید:setCookie('proBox', index, 30);
در نهایت در انتهای صفحه قبل از تگ body کد زیر را درج کنید:<script>
if(getCookie('proBox') > 0){
runprobox(getCookie('proBox'));
}
</script>
به این صورت آخرین آیتم فعال منو برای 30 روز در حافظه مرورگر باقی می ماند حتی اگر پنجره مرورگر بسته شود یا سیستم را خاموش کنیم.پروین نقوی
۱۸:۵۹ ۱۳۹۹/۱۲/۲۰
سلام ممنون از مطالب خوبتون. یسوال داشتم من به title خصوصیت border-redius دادم و میخواستم وقتی رو تایتل کلیک میشه بوردر ردیوس های پایین (هم چپ هم راست) صفر بشوند. آیا شما میدونین این خصوصیت رو چگونه و کجا باید در کد اسکریپت اضافه کنم؟؟؟؟؟
یعنی
یعنی
border-bottom-right-redius=0, border-bottom-left-redius=0
ابتدا به بلاک مربوط به تیتر یک آی دی منحصر به فرد اختصاص دهید، مثال:
<div id="proboxtitle-1" class="proboxtitle" onclick="runprobox(1);">
سپس تابع runprobox را به شکل زیر ویرایش کنید:function runprobox(index){
var target = document.getElementById("proboxtitle-" + index);
var divID = "probox" + index + "content";
if(openprobox == divID){
divID = '';
}
if(target.style.borderBottomLeftRadius === '0px'){
target.style.borderBottomLeftRadius = '8px';
target.style.borderBottomRightRadius = '8px';
} else {
target.style.borderBottomLeftRadius = '0px';
target.style.borderBottomRightRadius = '0px';
}
setTimeout("animate(" + new Date().getTime() + "," + TimeToSlide + ",'" + openprobox + "','" + divID + "')", 33);
openprobox = divID;
}
behrouz
۱۴:۴۷ ۱۳۹۷/۰۹/۱۱
خیلی ممنون بعد یه سوال دیگه چجوری متن انگلیسی رو چپ چین کنم؟
ممنون از راهنماییتون
ممنون از راهنماییتون
برای نمایش به صورت چپ چین، متن انگلیسی را به شکل زیر درج کنید:
<div style="direction: ltr;">English Text</div>
behrouz
۱۲:۰۶ ۱۳۹۷/۰۹/۱۱
سلام خسته نباشید ممنون از مطلبتون
فقط یه سوال
وقتی میخوام یه متن چند خطی وارد کنم همشو پشت هم مینویسه چجوری میتونم اخر یه متن چی بزارم که متن بعدی رو از خط بعدی شروع کنه؟؟؟؟؟
فقط یه سوال
وقتی میخوام یه متن چند خطی وارد کنم همشو پشت هم مینویسه چجوری میتونم اخر یه متن چی بزارم که متن بعدی رو از خط بعدی شروع کنه؟؟؟؟؟
برای رفتن متن به خط جدید می توانید از تگ br استفاده کنید، مثال:
متن اول<br>متن دوم
حسین
۱۴:۰۰ ۱۳۹۷/۰۳/۱۷
سلام. داداش میتونی همینو تبدیل به منوی وردپرسی کنی؟
لطفا در این رابطه به انجمن های وردپرس مراجعه کنید.
محسن
۱۱:۵۱ ۱۳۹۵/۰۳/۳۱
سلام و عرض ادب
بابت تمام زحمات شما متشکرم
سوالی که برای اکثر دوستان پیش اومده (افزایش ارتفاع به مقدار نیاز، یعنی ارتفاع رو ما تعیین نکنیم) :
کافی هست که بجای مقدار :
مقدار زیر را درج کنید :
موفق باشید
بابت تمام زحمات شما متشکرم
سوالی که برای اکثر دوستان پیش اومده (افزایش ارتفاع به مقدار نیاز، یعنی ارتفاع رو ما تعیین نکنیم) :
کافی هست که بجای مقدار :
opening.style.height = contentHeight + 'px';
مقدار زیر را درج کنید :
opening.style.display = 'block';
opening.style.height = 'auto';
مقدار اول در کد دوبار تکرار شده و باید هر دو ویرایش بشنموفق باشید
سپاس فراوان از به اشتراک گذاری راه حل.
زهرا
۱۰:۱۶ ۱۳۹۴/۰۹/۲۱
سلام. خیلی ممنون از آموزش خوبتون. اما من مشکل پیدا کردم. وقتی یک باکس اضافه می کنم نه محتواشو نشون می ده و نه باکس قبلش بسته میشه. همچنین اگر به باکس قبلی یک زیر منو اضافه کنم باکسی که اضافه کردم نمایش داده نمیشه. علتش چیه؟ ممنون
سلام
قاعدتا در تنظیم کدها مشکلی وجود دارد! دقت کنید که برای بلاک جدید باید در دو قسمت runprobox و proboxcontent مطابق با نمونه کدها، عدد متناظر را تنظیم کنید.
قاعدتا در تنظیم کدها مشکلی وجود دارد! دقت کنید که برای بلاک جدید باید در دو قسمت runprobox و proboxcontent مطابق با نمونه کدها، عدد متناظر را تنظیم کنید.
۱۷:۵۴ ۱۳۹۴/۰۶/۲۸
سلام
خوب بود و شیک و قشنگ فقط یه آیکون (از این + ها مثلا) کم داشت :-)
خوب بود و شیک و قشنگ فقط یه آیکون (از این + ها مثلا) کم داشت :-)
سلام
هدف ما بیشتر آموزش اصول پایه کار است، سایر موارد سفارشی را خودتان به صورت سلیقه ای می توانید اضافه کنید!
هدف ما بیشتر آموزش اصول پایه کار است، سایر موارد سفارشی را خودتان به صورت سلیقه ای می توانید اضافه کنید!
۱۵:۰۴ ۱۳۹۳/۱۱/۰۸
درود
ممنون از آموزش خوبتون
من از این کد استفاده کردم. اما یک مشکلی که دارم اینه که content هر div من خیلی زیاد هست . وقتی محتوا بلاک اول رو باز میکنم مشکلی نیست محتویات به درستی نمایش داده میشه و تا آخر مطلب رو می خونم. وقتی به پایین مطلب میرسم میخوام روی بلاک دومی کلیک کنم که اون محتواش از بلاک اولی خیلی کمتر هست. واسه همین هم وقتی رو بلاک دوم کلیک میکنم دیگه محتوای دوم رو نمیتونم ببینم تا اینکه با موس برم بالای صفحه. حالا چطور باید کاری کنم که با کلیک روی هر بلاک صفحه نمایش به قسمت اول اون بلاک منتقل بشه.
نمی دونم تونستم مشکلم رو دقیق توضیح بدم یا خیر!؟
ممنون از آموزش خوبتون
من از این کد استفاده کردم. اما یک مشکلی که دارم اینه که content هر div من خیلی زیاد هست . وقتی محتوا بلاک اول رو باز میکنم مشکلی نیست محتویات به درستی نمایش داده میشه و تا آخر مطلب رو می خونم. وقتی به پایین مطلب میرسم میخوام روی بلاک دومی کلیک کنم که اون محتواش از بلاک اولی خیلی کمتر هست. واسه همین هم وقتی رو بلاک دوم کلیک میکنم دیگه محتوای دوم رو نمیتونم ببینم تا اینکه با موس برم بالای صفحه. حالا چطور باید کاری کنم که با کلیک روی هر بلاک صفحه نمایش به قسمت اول اون بلاک منتقل بشه.
نمی دونم تونستم مشکلم رو دقیق توضیح بدم یا خیر!؟
سلام
می توانید کد زیر را به انتهای تابع animate اضافه کنید:
می توانید کد زیر را به انتهای تابع animate اضافه کنید:
if(openingId){
document.getElementById(openingId).scrollIntoView();
}
البته برای کسب نتیجه بهتر، باید برای بلاک های تیتر id تعریف و نمای کاربر را به جای بلاک های محتوا، به آن id منتقل کنید.محسن
۱۹:۰۵ ۱۳۹۳/۰۹/۲۵
با سلام
چطور می توان زیر منو های ایجاد شده را تغییر اندازه داد
چطور می توان زیر منو های ایجاد شده را تغییر اندازه داد
سلام
- در قسمت متغیر contentHeight در ابتدای کد، ارتفاع بلاک محتوا را به پیکسل مشخص می کنیم، این همان بلاکی است که محتویات هر منو را در خود نمایش می دهد.
- در قسمت متغیر contentHeight در ابتدای کد، ارتفاع بلاک محتوا را به پیکسل مشخص می کنیم، این همان بلاکی است که محتویات هر منو را در خود نمایش می دهد.
faezeh
۱۹:۳۴ ۱۳۹۳/۰۸/۲۷
سلام خسته نباشید. من در زیر منوش عکس میخوام بزارم. چطور میشه وقتی روی منو کلیک کردیم یک زیر منو به اندازه 282 در 282 باز شود؟؟؟
سلام
دقیقا متوجه سوال و منظورتان از "زیر منو" نشدیم! اما در کل آموزش های سایت با هدف استفاده عمومی ارائه می شوند، برای اعمال تغییرات سفارشی و مطابق با نیاز خود باید HTML + CSS بلد باشید.
دقیقا متوجه سوال و منظورتان از "زیر منو" نشدیم! اما در کل آموزش های سایت با هدف استفاده عمومی ارائه می شوند، برای اعمال تغییرات سفارشی و مطابق با نیاز خود باید HTML + CSS بلد باشید.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.