En utilisant jQuery, je voudrais désactiver le défilement du corps:
Mon idée est de:
- Ensemble
body{ overflow: hidden;}
- Capturez le courant
scrollTop();/scrollLeft()
- Liez à l'événement de défilement du corps, définissez scrollTop / scrollLeft sur la valeur capturée.
Y a-t-il un meilleur moyen?
Mettre à jour:
Veuillez consulter mon exemple, et une raison pour laquelle, sur http://jsbin.com/ikuma4/2/edit
Je suis conscient que quelqu'un se demandera "pourquoi n'utilise-t-il pas simplement position: fixed
sur le panneau?".
Veuillez ne pas suggérer cela car j'ai d'autres raisons.
Réponses:
Le seul moyen que j'ai trouvé pour le faire est similaire à ce que vous avez décrit:
Ensuite, lorsque vous êtes prêt à autoriser à nouveau le défilement, annulez tout cela.
Edit: aucune raison pour laquelle je ne peux pas vous donner le code puisque je me suis donné la peine de le déterrer ...
la source
auto
, il serait écrasé. J'avais besoin de préserver le paramètre existant, ce qui ajoute également des frais généraux.html
etbody
avecoverflow: hidden
est insuffisant? Nous finissons toujours par avoir besoin du gestionnaire d'événements.Cela désactivera complètement le défilement:
Restaurer:
Je l'ai testé sur Firefox et Chrome.
la source
height: 100%
verrouille efficacement le défilement à la position actuelle sans sauter - sur le dernier Chrome, au moins.essaye ça
la source
$('#element').off('scroll touchmove mousewheel');
body
- vous uniquement le défilement tout en autorisant le défilement dans d'autres éléments enfants qui l'ont faitoverflow: scroll
?Je viens de fournir un petit réglage de la solution par tfe . En particulier, j'ai ajouté un contrôle supplémentaire pour m'assurer qu'il n'y a pas de décalage du contenu de la page (aka décalage de page ) lorsque la barre de défilement est définie sur
hidden
.Deux fonctions Javascript
lockScroll()
etunlockScroll()
peuvent être définies, respectivement, pour verrouiller et déverrouiller le défilement de la page.où j'ai supposé que le
<body>
n'a pas de marge initiale.Notez que, bien que la solution ci-dessus fonctionne dans la plupart des cas pratiques, elle n'est pas définitive car elle nécessite une personnalisation supplémentaire pour les pages qui incluent, par exemple, un en-tête avec
position:fixed
. Entrons dans ce cas particulier avec un exemple. Supposons avoiravec
Ensuite, il faut ajouter les éléments suivants dans les fonctions
lockScroll()
etunlockScroll()
:Enfin, faites attention à une valeur initiale possible pour les marges ou les rembourrages.
la source
marginRight
etmarginLeft
:)vous pouvez utiliser ce code:
la source
Pour désactiver le défilement, essayez ceci:
réinitialiser:
la source
J'ai écrit un plugin jQuery pour gérer cela: $ .disablescroll .
Il empêche le défilement des événements de la molette de la souris, du toucher et de la pression de touche, tels que Page Down.
Il y a une démo ici .
Usage:
la source
Vous pouvez attacher une fonction pour faire défiler les événements et empêcher son comportement par défaut.
https://jsfiddle.net/22cLw9em/
la source
Une doublure pour désactiver le défilement, y compris le bouton central de la souris.
edit : Il n'y a pas besoin de jQuery de toute façon, ci-dessous comme ci-dessus dans vanilla JS (cela signifie pas de framework, juste JavaScript):
this.documentElement.scrollTop - standard
this.body.scrollTop - Compatibilité IE
la source
$("body").css("overflow", "hidden");
$("body").css("overflow", "initial");
la source
Ne pouvez-vous pas simplement définir la hauteur du corps à 100% et masquer le débordement? Voir http://jsbin.com/ikuma4/13/edit
la source
Quelqu'un a posté ce code, qui a le problème de ne pas conserver la position de défilement lors de la restauration. La raison en est que les gens ont tendance à l'appliquer au html et au corps ou simplement au corps, mais il ne devrait être appliqué qu'au html. De cette façon, une fois restauré, la position de défilement sera conservée:
Restaurer:
la source
'overflow': 'auto',
utiliser'overflow': 'initial',
Cela peut ou non fonctionner pour vos besoins, mais vous pouvez étendre jScrollPane pour déclencher d'autres fonctionnalités avant qu'il ne fasse son défilement. Je viens juste de tester cela un peu, mais je peux confirmer que vous pouvez intervenir et empêcher complètement le défilement. Tout ce que j'ai fait c'est:
<script type="text/javascript" src="script/jquery.jscrollpane.js"></script>
positionDragY(destY, animate)
fonctionLancez events.html et vous verrez une boîte de défilement normalement qui en raison de votre intervention de codage ne défilera pas.
Vous pouvez contrôler l'ensemble des barres de défilement du navigateur de cette façon (voir fullpage_scroll.html).
Donc, probablement la prochaine étape est d'ajouter un appel à une autre fonction qui se déclenche et fait votre magie d'ancrage, puis décide de continuer avec le défilement ou non. Vous avez également des appels d'API pour définir scrollTop et scrollLeft.
Si vous voulez plus d'aide, postez où vous en êtes!
J'espère que cela a aidé.
la source
J'ai mis une réponse qui pourrait aider ici: jQuery simplemodal désactiver le défilement
Il montre comment désactiver les barres de défilement sans déplacer le texte. Vous pouvez ignorer les parties concernant simplemodal.
la source
Si vous souhaitez simplement désactiver le défilement avec la navigation au clavier, vous pouvez remplacer l'événement keydown.
la source
Essayez ce code:
la source
Vous pouvez couvrir la fenêtre avec un div à défilement pour empêcher le défilement du contenu sur une page. Et, en masquant et en affichant, vous pouvez verrouiller / déverrouiller votre parchemin.
Faites quelque chose comme ceci:
la source
Pour les personnes qui ont des mises en page centrées (via
margin:0 auto;
), voici un mash-up de laposition:fixed
solution avec la solution proposée par @tfe .Utilisez cette solution si vous rencontrez un accrochage de page (en raison de l'affichage / du masquage de la barre de défilement).
…combiné avec…
… Et enfin, le CSS pour
.modal-noscroll
…Je me risquerais à dire est plus d'une solution appropriée que toutes les autres solutions là - bas, mais je ne l' ai pas testé ce encore bien ...: P
Edit: veuillez noter que je n'ai aucune idée de la façon dont cela pourrait fonctionner (lire: exploser) sur un appareil tactile.
la source
Vous pouvez également utiliser DOM pour ce faire. Supposons que vous ayez une fonction que vous appelez comme ceci:
Et c'est tout ce qu'il y a à faire! J'espère que cela aide en plus de toutes les autres réponses!
la source
C'est ce que j'ai fini par faire:
CoffeeScript:
Javascript:
la source
Je ne sais pas si quelqu'un a essayé ma solution. Celui-ci fonctionne sur tout le corps / html mais il ne fait aucun doute qu'il peut être appliqué à n'importe quel élément qui déclenche un événement de défilement.
Il suffit de définir et de désactiver scrollLock selon vos besoins.
Voici l'exemple JSFiddle
J'espère que celui-ci aide quelqu'un.
la source
Je pense que la solution la meilleure et la plus propre est:
Et avec jQuery:
Ces écouteurs d'événements devraient bloquer le défilement. Supprimez-les simplement pour réactiver le défilement
la source