PDA

View Full Version : سوال: اجرای تابع به طور متناوب



ms_raha
یک شنبه 30 تیر 1392, 23:18 عصر
سلام
من تابعی رو با jquery نوشتم که میخوام تا بستن صفحه به طور متناوب اجرا بشه از setInterval استفاده کردم ولی اجرا نمیشه


ممنون

jalil_gh
دوشنبه 31 تیر 1392, 11:43 صبح
کدهاتونو بزارید ببینیم چطوریه؟

ms_raha
دوشنبه 31 تیر 1392, 14:54 عصر
$(document).ready(function(){

$("#img1").delay(1000).fadeIn();

$("#img2").delay(2000).fadeIn();

});
میخوام این کدها به طور متناوب تا بستن صفحه اجرا شود این کدها رو درون یک تابع قرار می دهم مثلا تابع img بعد از دستور setInterval به صورت زیر استفاده می کنم ولی فقط یکبار اجرا میشود

setInterval(img(),1000)

MEHR4N
دوشنبه 31 تیر 1392, 15:08 عصر
علت اینکه یکبار انجام میشه اینه که شما داخل اینتروال به عنوان آرگومان اول باید یک تابع بدین، ولی شما تابع رو اجرا کردین، یعنی باید اینجوری بگذارین:


setInterval( img, 1000);

اونجوری فقط img اجرا میشه، تنها راهی که تابع به اون صورتم اجرا شه اینه که شما در انتهای تابع خود تابع رو retrun کنین مثلا:


function() img{
// do something
return img;
}
setInterval( img() , 1000 )


فرق این دو تا اینه که تو حالته اول بعد گذشت 1000 میلی ثانیه اولین فراخوانی تابع انجام میشه، ولی در حالت دوم فراخوانی اول همون لحظه اجرا میشه

jalil_gh
دوشنبه 31 تیر 1392, 15:16 عصر
وقتی یک تابع رو به عنوان آرگومان به متد setInterval میدید نباید از پرانتز استفاده کنید. فقط اسم تابع رو بدید کافیه.
setInterval(img, 1000);
بعدش اینکه کد
$("#img").delay(1000).fadeIn()
بار اول که فراخوانی میشه تصویر رو نشون میده و بار دوم که فراخوانی میشه تصویر قبلا نشون داده شده است و دیگه کار خاصی انجام نمیده.؟؟؟

ms_raha
دوشنبه 31 تیر 1392, 15:20 عصر
این کار رو کردم ولی نشد

MEHR4N
دوشنبه 31 تیر 1392, 15:35 عصر
البته من به نکته ای که آقای jalil_gh اشاره کردن، دقت نکرده بودم، شما یکبار که fadeIn کردین دیگه اونو نشون داده، دور بعد هم بخواین چیزی رو نمایش بدین که visible هست کاری انجام نمیده، به جاش باید از تابع fadeToggle() استفاده کنین، که چک میکنه اگه visible بود fadeOut میکنه اگه نبود fadeIn