Jquery, déliant la roulette de la souris de l'événement, puis de reliaison il une fois que les mesures sont terminées?
J'ai eu du mal avec ce pour un peu de temps maintenant.. je suis en utilisant ce code pour surveiller la roulette de la souris de sorte qu'il peut être utilisé pour le défilement avec un curseur que j'ai.. cependant, il a un problème où les actions de la file d'attente jusqu'donc, si vous faites défiler avec la molette de la souris rapide (comme n'importe qui le ferait normalement) ils construisent et il provoque un comportement buggé.. je sais à propos de la manipulation de ce type de problème avec l'animation, mais pas avec la roulette de la souris moniteur..
Je veux faire quelque chose comme unbind la roulette de la souris au début de l'action (dans ce cas, pour faire défiler la barre de défilement après la molette de la souris est déplacé), puis reconnectez-après cela, de sorte que si l'utilisateur n'trop défile trop vite, il l'ignore jusqu'à ce que l'initiale de défilement est terminé.. j'ai essayé le code ci-dessous mais ce n'est pas de reliaison donc je ne suis pas sûr de ce que je fais de mal, tout conseil est le bienvenue.
$("#wavetextcontainer").bind("mousewheel", function(event, delta) {
//HERE IS WHERE EVENT IS UNBOUND:
$("#wavetextcontainer").unbind("mousewheel");
var speed = 10;
var mySlider = $("#slider");
var sliderVal = mySlider.slider("option", "value");
sliderVal += (delta*speed);
if (sliderVal > mySlider.slider("option", "max")) sliderVal = mySlider.slider("option", "max");
else if (sliderVal < mySlider.slider("option", "min")) sliderVal = mySlider.slider("option", "min");
$("#slider").slider("value", sliderVal);
event.preventDefault();
//HERE I WANT TO REBIND THE EVENT:
$("#wavetextcontainer").bind("mousewheel");
});
OriginalL'auteur Rick | 2010-07-26
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de stocker la fonction ont été vous pouvez y faire référence, comme ceci:
En faisant cela, vous pouvez appeler
.bind()
plus tard à la même fonction (vous ne pouvez pas faire référence à un anonyme). Vous êtes en train d'essayer d'appeler.bind()
sans une fonction pour gérer quoi que ce soit, qui ne fonctionne pas. Cela a également l'avantage supplémentaire d'être en mesure de passer de la même fonction de référence à.unbind()
de sorte qu'il se délie seulement que gestionnaire, pas toutmousewheel
gestionnaire.Vous pouvez aussi le faire sans de l'onu/re-liaison, comme ceci:
Ce n'utilise
$.de données()
de stocker une "nous travaillons" saisie de données à l'élément, si quelque chose frappe ce gestionnaire s'il est vrai, il retourne juste et ignore l'événement.Je vois maintenant.. les fonctions anonymes sont quelque chose que j'ai lutté avec un peu car il n'existe pas dans les autres langues que j'ai utilisé auparavant.. cela permet de clarifier les choses pour moi, merci
Bienvenue 🙂 j'ai ajouté une autre alternative qui peut simplifier les choses encore plus loin pour vous, lui donner un essai.
Je pense que la 2ème réponse peut mieux travailler depuis la déliaison des œuvres, autant que la unbind / relier, mais encore de donner une certaine étrangeté, avec ce qui semble être un queing de l'événement
OriginalL'auteur Nick Craver
Dans cette situation, c'est beaucoup d'inutiles de liaison/déliaison, ce qui est plus difficile et la plus inefficace qu'il doit être. La déliaison est idéal pour libérer des ressources lorsqu'une action n'est plus nécessaire, ou ne sera pas nécessaire pour un certain temps; mais pour une fraction de seconde de ne pas vouloir votre code à exécuter déliaison/nouvelle liaison est beaucoup de frais généraux, il suffit d'utiliser une variable pour déterminer si à l'honneur de la molette de la souris ou pas, et activer le vrai et le faux en tant que de besoin. Probablement pas besoin d'utiliser jquery données soit, juste un rapide var définies à l'extérieur de la fonction.
mais honnêtement, la logique de la désactivation de la barre de défilement, seulement pendant les quelques lignes au-dessus de processus est un peu faussée, vous musta été un programmeur qui a traité avec le multithreading langues beaucoup 🙂 En js, il n'est même pas possible pour un autre événement à feu au moyen d'une fonction lignes de code, donc je suppose que vous préférez le fermer pour une période de temps (et cela s'applique si vous utilisez une variable ou lier/délier):
OriginalL'auteur Jimbo Jonny