2010-10-07 3 views
2

Я использую jquery для вызова некоторых функций javascript с задержкой между ними.
Также я использую Jquery WaitЛучший способ поставить задержку после вызова функций javascript

Когда я вызываю функцию ниже, все функции называются соответственно, между задержками нет задержек.

$(this) 
.call(f1) 
.wait(5000) 
.call(f2) 
.wait(5000) 
.call(f3); 

Здесь вызов функция вызывает некоторую функцию, как я сделал

$.fn.call = function (f) { 
    if (f) 
     f(); 

    return this; 
}; 

Что я делаю неправильно? Как я могу добиться чего-то подобного?
Спасибо

+0

Что, собственно, не работает здесь ? –

+0

функции вызываются один за другим, между ними нет задержек – Myra

ответ

6

Если вы хотите, чтобы вызвать функцию каждые 5 секунд использовать

setTimeout(function(){f1},5000); 
setTimeout(function(){f2},10000); 
setTimeout(function(){f2},15000); 

, если вы хотите вызвать каждую функцию через 5 секунд после последнего одного прекращено использование

setTimeout(function(){f1;setTimeout(function(){f2;setTimeout(function(){f3},5000);},5000);},5000); 
+0

setTimeout() будет вызывать каждую функцию один раз. Чтобы повторно вызвать функцию, используйте setInterval(). – Dijkstra

+0

Есть ли способ достичь этого в jquery? я имею в виду, как я сделал – Myra

+0

зачем вам jQuery? jQuery - это всего лишь инфраструктура javascript и будет работать с этим – Thariama

2

Вы дон Не нужно wait() из этой кулинарной книги; delay() встроен и, похоже, имеет одинаковую функциональность. Но любая функция включает в себя добавление чего-то к внутренней очереди эффектов jQuery, а затем ее удаление после истечения тайм-аута, т. Е. Это не заявление о спящем режиме, поэтому он не будет ждать, пока не вернется.

Если вы хотите использовать delay() или wait(), вы должны сделать call() Епдиеие функция с queue(). Просто наброски, но что-то вроде:

$.fn.call = function(f) { 
    if (f) { 
     $(this).queue(function() { 
      f(); 
      $(this).dequeue(); 
     } 
    } 
    return this; 
} 

Тогда я ожидаю, что ваш код будет работать так, как вы планируете.

+0

ваш код не работает должным образом :( – Myra

+0

Ну, это был просто эскиз, который поможет вам в правильном направлении, поскольку использование ожидания/задержки связано с этим. Я на самом деле не пробовал, поэтому может потребоваться некоторая настройка. для queue() и попробуйте некоторые из их примеров. – 2010-10-07 21:56:59

1

Вот функция, которая вызывает в последовательности массив функции:

$.fn.callFn = function(fns, delay) { 
    var fn, that = this; 
    if(fns.length > 0){ 
     fn = fns.shift() 
     fn && fn(); 
     setTimeout(function(){ 
      that.callFn(fns, delay); 
     }, delay); 
    } 
    return this; 
}; 

И вы могли бы назвать это так:

$(this).callFn([f1, f2, f3], 2000); 
+0

У меня будет работа с моим кодом ($ (this) .call (f1) .wait (5000) .call (f2) .wait (5000) .animate (...). wait (1000) .call (f3);), поэтому я должен придерживаться jquery. – Myra

1
$('#box').slideUp(300).delay(800).fadeIn(400); 

/* .delay = wait time = 800 (this means it will wait 800/1000 of a second/ "1000 = 1 second") */ 
Смежные вопросы