نمایش نتایج 1 تا 3 از 3

نام تاپیک: متدی برای باز و بسته کردن یک div

  1. #1
    کاربر دائمی آواتار fazel-d
    تاریخ عضویت
    آذر 1386
    محل زندگی
    بورکینافاسو
    پست
    399

    متدی برای باز و بسته کردن یک div

    من یک دکمه دارم که ارتفاع div رو برابر با 200 می کنه و دکمه hide من با استفاده از setInterval میاد و تابع hide من رو با زمان 20 میلی فراخوانی می کنه.تا زمانی که ارتفاع div برابر با صفر بشه.
    مشکلی که وجود داره اینه که برای اولین با خوب عمل می کنه ولی زمانی که دوباره دکمه show رو که می زنم، بدون اینکه دکمه hide رو بزنم به خودی خود div بسته می شه.
    احساس می کنم که متد setInterval به صورت پشته کار می کنه و در حافظه باقی می مونه

    کد Show:
    function show(id) {
    var div;
    if (id == null) {
    div = 'popup'
    }
    else div = document.getElementById(id);

    div.setAttribute('style', 'height:350px');
    }


    کد Hide:
    function hide(divId) {
    if (divId == null) {
    divId = 'popup';
    }

    var div = document.getElementById(divId); //.firstChild.nodeValue;


    var h = div.style.height;

    if (h != null) {
    h = h.split("px")[0]; // split number of height
    }

    var x ;
    if (h > 0) {
    h -= 1;
    div.style.height = h + 'px';
    x = setInterval('hide()', 30);
    }
    else {
    clearInterval(x);
    }
    }
    آخرین ویرایش به وسیله fazel-d : پنج شنبه 07 مرداد 1389 در 16:51 عصر

  2. #2

    نقل قول: متدی برای باز و بسته کردن یک div

    function show(id) {
    var div;
    if (id == null) {
    id = 'popup'
    }
    div = document.getElementById(id);
    div.style.height = '350px';
    }

    function hide(divId) {
    if (divId == null) {
    divId = 'popup';
    }

    var div = document.getElementById(divId); //.firstChild.nodeValue;


    var h = div.style.height;

    if (h != null) {
    h = h.split("px")[0]; // split number of height
    }

    if (h > 0) {
    h -= 2;
    div.style.height = h + 'px';
    setTimeout('hide()', 20);
    }
    }


    اولا : زمانی که از interval استفاده میکنی نباید ائنو تو همون متدی بنویسی که داری صداش میکنی .... چون interval تا زمانی که clear نشده به کارش ادامه میده ....
    دوما شما وقتی x رو درون متد تعریف میکنی هر بار که متد اجرا میشه یه interval جدید دروم این x قرار میگیره و reference به Interval های قبلی از بین میره در حالی که خودشون تو حافظه باقی میمونن و به کارشون ادامه میدن و clear هم فقط آخرین interval ساخته شده رو حذف میکنه
    سوما : متد show خودشم مشکل داشت .......

  3. #3

    نقل قول: متدی برای باز و بسته کردن یک div

    نقل قول نوشته شده توسط fazel-d مشاهده تاپیک
    احساس می کنم که متد setInterval به صورت پشته کار می کنه و در حافظه باقی می مونه

    سلام.
    متود setInterval تابع مورد نظر شما رو تا وقتیکه clearInterval رو فراخوانی نکرده اید، در بازه زمانی مورد نظر اجرا میکنه. برای اینکه این کار یک بار انجام بشه، میتونید از setTimeout استفاده کنید.

    اما در مورد setInterval حواستون باشه که اگر تابع مورد نظر، در مدت زمانی کمتر از interval شما اجراش به پایان نرسه، این چرخه میتونه مدام تکرار بشه و Browser رو در نهایت به زانو در بیاره. روش بهتر، استفاده از setTimeout و فراخوانی مجدد این متود، در انتهای تابع هستش (اگر میخواهید کاری رو در بازه های مشخصی بیش از یکبار انجام بدید).

    موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •