2010-11-13 3 views
1

Un autre débutant-Question de moi-même:Est-il possible de désactiver un .click (fonction) en cours?

Est-il possible de désactiver un .click(function) pendant qu'il est en train de [glisser vers le haut/bas et de faire des commutateurs d'id]?

J'ai un tas d'ancres qui utilisent la même fonction et je ne veux pas que les utilisateurs cliquent sur un autre lien alors qu'il y a encore du slide up/down. Pour obtenir cet effet, je dois bloquer la fonction pendant qu'elle est en cours.

Des idées pour quelqu'un?

Répondre

0

Vous pouvez définir un indicateur booléen dans le gestionnaire de clic et le désinstaller à la fin de l'animation. Puis, en haut du gestionnaire, vous pouvez return false; si le drapeau est activé.

3

Vous pouvez le faire comme ceci:

$('some_selector').click(function() { 
    var running = false; 

    return function() { 
     if (running === false) { 
      running = true; 
      // do animation stuff; 
      // put this in your callback: 
      running = false; 
     } 

     return false; 
    }; 
}()); 

Cette animation désactive l'en running égale true.

+0

La portée de 'running' ne serait pas conforme à tous les éléments comme il a besoin d'être ici ... aussi il existe des moyens plus simples pour le faire :) –

+0

@ Nick: Comment est la portée de changer? Pouvez-vous expliquer cela en détail? – jwueller

+0

@Nick - Il semble fonctionner avec un nombre d'éléments statique, mais pas si le gestionnaire doit être lié à de nouveaux éléments. C'est ce que vous vouliez dire? http://jsfiddle.net/jYREj/ – user113716

4

Vous pouvez vérifier si l'un des éléments qui vous passionnent sont en cours d'animation à l'aide du sélecteur :animated, comme ceci:

$("a.myClass").click(function() { 
    if($("a.myClass:animated").length) return false; 
    //animate/do stuff 
}); 

Bien que tous les éléments a.myClass sont animés, les clics ne seront sans effet.

+0

Bah! Tu me bats! Haha =) – John

+0

@elusive - Vous ne pouvez pas, relisez la question ...* Les autres éléments * peuvent être animés, pas nécessairement l'élément sur lequel vous vous trouvez. Je ne pense pas que ce soit même le même sélecteur, probablement des enfants/éléments liés qui sont animés. –

0

Jetez un coup d'œil au sélecteur :animated. Comme le dit la documentation, il retournera tous les éléments qui sont en cours. Si vous avez un élément spécifique que vous recherchez, vous pouvez utiliser son ID ou sa classe avec ce sélecteur pour vérifier si son animation est en cours d'exécution.

$("#myButton").click(function(){ 
    if ($("#myDiv:animated").length === 0) { 
    // do awesome animation here 
    } else { 
    // brown explosions! Dumbledore dies, so does Hedwig! 
    return false; 
    } 
}); 
+0

Moins de zéro? Comment cela va-t-il arriver? Je pense que vous vouliez dire '=== 0'. – jwueller

+0

Woops. Je voulais dire '<=', mais '===' fonctionnerait aussi. Peu importe, peu importe. Je pense que Nick Craver est parti dans le sac. Joyeux Noël! – John

Questions connexes