J'ai cette fonction:
function block_scroll(key){
if (key) {
$(window).bind("scroll", function(){
$('html, body').animate({scrollTop:0}, 'fast');
});
} else {
$(window).unbind();
}
}
La première partie fonctionne comme il se doit, mais quand j'appelle plus tard block_scroll (false) - c'est toujours un blocage. Que faire?
RE-EDIT Donc, comme suggéré, j'ai essayé ...
$(window).unbind("scroll");
... avec une certaine confusion. Au début, cela n'a pas fonctionné - puis cela a fonctionné.
Maintenant, je pense que cela a échoué car je faisais défiler le moment où block_scroll (false) a été appelé. J'ai testé cela plusieurs fois maintenant. Et oui, si je ne fais rien pendant que le script s'exécute et que block_scroll (false) est appelé - cela fonctionne. Mais ce n'est pas le cas si je défile quand on l'appelle.
$(window).unbind('scroll');
Même si la documentation indique qu'elle supprimera tous les gestionnaires d'événements si elle est appelée sans arguments, cela vaut la peine d'essayer de la dissocier explicitement.
Cela a fonctionné si vous avez utilisé des guillemets simples? Cela ne semble pas juste - pour autant que je sache, JavaScript traite les guillemets simples et doubles de la même manière (contrairement à d'autres langages comme PHP et C).
Notez que les réponses qui suggèrent d'utiliser unbind()
sont désormais obsolètes en tant que cette méthode a été déconseillée et seront supprimées dans les futures versions de jQuery.
Depuis jQuery 3.0, .unbind () est déconseillé. Il a été remplacé par la méthode .off () depuis jQuery 1.7, donc son utilisation était déjà déconseillée.
Au lieu de cela, vous devez maintenant utiliser off()
:
$(window).off('scroll');
Tu dois:
unbind('scroll')
Pour le moment, vous ne spécifiez pas l'événement à dissocier.
essaye ça:
$(window).unbind('scroll');
ça marche dans mon projet
Très vieille question, mais au cas où quelqu'un d'autre tomberait dessus, je recommanderais d'essayer:
$j("html, body").stop(true, true).animate({
scrollTop: $j('#main').offset().top
}, 300);