2011-02-04 1 views
0

Je suis en train d'écrire un rotateur de bannières et je veux qu'il fasse défiler quelques images après quelques secondes. Est-ce que jQuery a quelque chose à attendre et à appeler le callback? Je peux voir la méthode .delay, mais il ne semble pas avoir une fonction de rappel. Ou peut-être que je devrais utiliser une fonction dépendante du navigateur? Ou peut-être que javascript contient déjà une fonction dont j'ai besoin? Je suis nouveau sur javascript: - | .chronométrage/attente en jQuery

Répondre

3

Vous pouvez toujours utiliser le javascript natif:

setTimeout(function(){ /* do your stuff */ }, 1000); 

Vous pouvez vous amuser avec mixins:

var timeoutCallback = function() { 
    this.foo = 5; 
} 

var scheduleTimeout = function(obj, delay) { 
    setTimeout(function(){ timeoutCallback.call(obj); }, delay); 
} 

var myobj = { foo: 1, bar: 2 } 
scheduleTimeout(myobj, 1000); // myobj.foo becomes 5 after 1000ms delay 
+0

Etes-vous sûr que '.call' fonctionnera? cela ne pointerait-il pas vers l'objet 'window' à l'intérieur de la fonction anon? –

+0

Vous avez raison, j'ai modifié le post après avoir vérifié qu'il fonctionne maintenant. Merci! –

0

Vous avez raison sur délai being la voie à suivre, si ce que vous souhaitez faire est le temps des effets jQuery.

Regardez le jQuery documentation on effects, et faites très attention au fonctionnement de la file d'effets, c'est un très bon framework. :)

0

Vous avez donc besoin de commencer votre effet pas immédiatement, mais après un certain temps? Donc, c'est vrai, c'est la fonction delay().

$("#test").delay(3000).fadeOut('slow'); 
// after 3 seconds element starts to fade out 

P.S.

Mais soyez prudent avec le retard. Par exemple ce code:

$("#test").fadeOut(1000).sleep(1000).fadeIn(1000); 

ne fonctionnera pas comme quelqu'un peut penser. Le sommeil sera synchrone avec fadeOut mais pas après qu'il se termine. Donc, si vous voulez faire un effet complet et que faire quelque chose - vous devriez faire par la fonction de rappel.

0

Ceci est l'exemple le plus simple que je puisse penser et une version condensée de ce que Joy Dutta a déjà dit. Il montre d'abord "Please wait" et après 3 secondes "... done!". Jetez-le dans la console Firebug et voyez ce qui se passe :-)

$('body').html('Please wait!'); 
setTimeout(function(){$('body').html('...done!');}, 3000);