2011-03-27 3 views
1

J'ai une fonction qui anime les éléments dom avec CSS3 si disponible. Maintenant, j'utilise souvent le sélecteur :animeted jQuery. Comment faire pour que mes éléments animés CSS3 répondent également au sélecteur :animeted?Ajouter manuellement le sélecteur ": animated" aux objets jQuery

Lorsqu'un objet DOM est animé avec jQuery il obtient "fxqueue":"inprogress" dans l'objet de données, donc je pensais que je pourrais ajouter manuellement mes éléments en utilisant:

$("div").eq(0).data({"fxqueue": "inprogress"});

mais

console.log($("div:animated"))

ne sélectionne rien.

Répondre

1

Cela ne fonctionnera pas.
Le filtre :animated est défini comme

jQuery.expr.filters.animated = function(elem) { 
    return jQuery.grep(jQuery.timers, function(fn) { 
     return elem === fn.elem; 
    }).length; 
}; 

Il vérifie si l'élément est en jQuery.timers.

Au lieu de cela, vous pouvez remplacer le sélecteur :animated:

var originalAnimated = jQuery.expr.filters.animated; 
jQuery.expr.filters.animated = function(elem) { 
    return originalAnimated(elem) || something; 
}; 
+0

bien merci! Mais je pense que je ne comprends pas tout. Que ferait "quelque chose" (dans votre exemple) si disons si j'avais défini .data ("css3animate", true) sur les éléments qui sont animés par ma fonction? (http://jsfiddle.net/backflip/BqFsM/) – meo

+0

@meo: 'quelquechose 'serait n'importe quelle condition. Vous pourriez écrire '|| $ .data (elem, 'css3animate') '. – SLaks

+0

ahhh je vois merci beaucoup! – meo