10
votes

Arrêter des animations de jQuery spécifiques

J'ai plusieurs animations sur un seul objet et je dois arrêter une animation spécifique plutôt que toutes. Il ne semble pas que la méthode .stop () peut faire cela.

Par exemple, lors de l'opacité et de la largeur d'animation simultanément, je devra peut-être annuler l'animation d'opacité tout en achetant l'animation de la largeur. Il semblerait que cela ne soit pas possible, mais j'espère que quelqu'un connaît un tour ou un appel d'API qui me manque.

Note: Je ne parle pas d'animations en file d'attente, je cherche à animer plusieurs attributs en même temps avec la possibilité d'arrêter certaines de ces animations d'attributs après avoir déjà commencé


3 commentaires

J'aurais pensé qu'il y aurait un moyen d'utiliser des files d'attente nommées personnalisées, mais cela ne semble pas que la méthode .top () peut cibler une file d'attente spécifique (loin que possible de le raconter).


Pour l'instant, j'ai apporté une demande de cette fonctionnalité bugs.jquery.com/ticket/8227 < / a>


Quels sont les critères d'arrêt d'une animation? Est-il basé sur une action d'utilisateur?


5 Réponses :


3
votes

Après avoir pensé à cela un peu plus difficile à ce sujet, j'ai réalisé que ce que vous essayez de faire n'est pas facile à faire à cause de la façon dont les animations sont manipulées dans JQuery.

Comme les animations sont gérées par une file d'attente, pas possible d'exécuter des animations simultanées sur le même élément sans qu'ils soient dans la même fonction. P>

C'est-à-dire, P>

var remaining = duration - ($.now() - start);
$(element).animate({opacity: '0.5', remaining)
          .stop();


3 commentaires

Beacoup de remerciements pour la reponse! Je ne peux pas bien comprendre, mais cela semble que ce code provoque une animation de largeur de 5 secondes, à laquelle l'animation d'opacité commencera. J'ai besoin de pouvoir exécuter à la fois les animations de largeur et d'opacité en même temps (c'est-à-dire la largeur et l'opacité changeant), avec la possibilité d'arrêter l'une ou l'autre avant l'achèvement sans arrêter les deux.


D'accord, j'ai révisé ma réponse maintenant que j'ai bien compris votre question :).


Bonjour Ian - Je voulais juste vous remercier tellement pour une réponse aussi détaillée. J'ai pu trouver une solution directe qui ne nécessite aucune sorte de suivi, alors malheureusement, je ne peux pas vous donner la réponse à la réponse :(. Espérons que vous pourrez utiliser la solution un jour!



1
votes

Au lieu d'une animation, pouvez-vous rompre dans plusieurs animations plus petites (opacité d'animation de 0 à 20%, puis animer de 20 à 40%, puis 40-60%, etc.) et au lieu de . STOP () - dans l'animation, vous ne le redémarrez pas à nouveau?


0 commentaires


0
votes

J'utilise le plug-in Jquery Cycle pour animer une douzaine de diapositives sur la même page en utilisant divers types d'animation différents (lingettes, mélanges, zooms, etc.). J'ai ensuite eu mon propre script de minuscule pour fade légèrement les images lorsque vous avez plané sur chaque diaporama:

# This code suited me better - it leaves the other running animations untouched

$(".box img").hover(
    function(){
        $(this).animate({opacity: 0.7}, {duration: 1000, queue: false});
    },
    function(){
        $(this).animate({opacity: 1}, {duration: 250, queue: false});
    }
);


0 commentaires

1
votes

update 2013

AS de JQuery 1.7 Vous pouvez utiliser .animate () avec une file d'attente nommée et utiliser .stop (leeename) pour arrêter uniquement ces animations dans la file d'attente. < / p>

http://api.jquerery.com/animate/
http://api.jquerery.com/stop/


0 commentaires