2008-09-12 5 views
11

J'ai une page qui utiliseComment puis-je arrêter un effet dans jQuery

$(id).show("highlight", {}, 2000); 

pour mettre en évidence un élément lorsque je lance une demande de paiement ajax, qui pourrait échouer pour que je veux utiliser quelque chose comme

$(id).show("highlight", {color: "#FF0000"}, 2000); 

dans le gestionnaire d'erreurs. Le problème est que si la première mise en évidence n'est pas terminée, la seconde est placée dans une file d'attente et ne fonctionnera pas tant que la première n'est pas prête. D'où la question: puis-je arrêter le premier effet?

Répondre

10

De la documentation jQuery:

http://docs.jquery.com/Effects/stop

Arrêtez l'animation actuellement en cours d'exécution sur les éléments correspondants. ...

Lorsque .stop() est appelée sur un élément, l'animation en cours d'exécution (le cas échéant) est immédiatement arrêtée. Si, par exemple, un élément est caché aveclorsque .stop() est appelé, l'élément sera toujours affiché, mais sera une fraction de sa hauteur précédente. Les fonctions de rappel ne sont pas appelées.

Si plus d'une méthode d'animation est appelée sur le même élément, les animations suivantes sont placées dans la file d'effets pour l'élément. Ces animations ne commenceront pas avant la fin du premier. Lorsque .stop() est appelée, l'animation suivante dans la file d'attente commence immédiatement. Si le paramètre clearQueue est fourni avec la valeur true, les autres animations de la file d'attente sont supprimées et ne sont jamais exécutées.

Si l'argument jumpToEnd est fourni avec la valeur true, l'animation en cours s'arrête, mais l'élément reçoit immédiatement ses valeurs cibles pour chaque propriété CSS. Dans notre exemple ci-dessus .slideUp(), l'élément serait immédiatement caché. La fonction de rappel est alors appelé immédiatement, si elle est fournie ...

+0

Merci, mon google-foo semble avoir ce soir :-) dent –

+2

Il arrive.StackOverflow est bon pour l'externalisation de la recherche :) –

+2

FYI - Je cherchais aussi cette réponse (en essayant d'arrêter un effet Pulsate), mais j'avais un '.stop()' dans mon code. Après avoir examiné les documents, j'avais besoin de '.stop (true, true)' – Dutchie432

15

Je listé comme un commentaire pour la réponse acceptée, mais je pensais que ce serait une bonne idée de l'afficher comme une réponse autonome car il semble à aider certaines personnes ayant des problèmes avec .stop()


FYI - Je cherchais cette réponse aussi bien (en essayant d'arrêter un Pulsate effet), mais je l'ai un .stop() dans mon code.

Après avoir examiné les documents, il me fallait .stop(true, true)

+3

Je t'aime mec! :) m'a sauvé beaucoup de temps. –

+0

@DimitarDimitrov Tout de suite à toi. Codage heureux. – Dutchie432

+1

C'est exactement ce que je cherchais à faire, et je pense que la plupart des gens cherchent à résoudre honnêtement, merci. – Jessycormier

2

.stop (true, true) va geler l'effet si elle est invisible au moment alors il reste invisible. Cela pourrait poser un problème si vous utilisez l'effet pulsé.

$('#identifier').effect("pulsate", {times:5}, 1000); 

Pour contourner cela, j'ajouté

$('#identifier').stop(true, true).effect("pulsate", { times: 1 }, 1);