J'ai un div, avec une barre de défilement, Quand il arrive à la fin, ma page commence à défiler. Puis-je arrêter ce comportement de toute façon?
javascript
html
Jeevan
la source
la source
Réponses:
Vous pouvez désactiver le défilement de la page entière en faisant quelque chose comme ceci:
la source
J'ai trouvé la solution.
http://jsbin.com/itajok
C'est ce dont j'avais besoin.
Et c'est le code.
http://jsbin.com/itajok/edit#javascript,html
Utilise un plug-in jQuery.
Mise à jour en raison d'un avis d'abandon
De jquery-mousewheel :
Ensuite,
event.deltaY
doit maintenant être utilisé:Démo
la source
La solution choisie est une œuvre d'art. Je pensais que c'était digne d'un plugin ...
Cela a été un inconvénient permanent pour moi et cette solution est si propre par rapport aux autres hacks que j'ai vus. Curieux de savoir comment cela fonctionne et à quel point il serait largement soutenu, mais bravo à Jeevan et à celui qui a initialement proposé cela. BTW - L'éditeur de réponses stackoverflow en a besoin!
METTRE À JOUR
Je pense que c'est mieux en ce sens qu'il n'essaye pas du tout de manipuler le DOM, cela empêche seulement le bouillonnement conditionnel ...
Fonctionne très bien en chrome et beaucoup plus simple que les autres solutions ... faites-moi savoir comment cela se passe ailleurs ...
VIOLON
la source
wheel
eventVous pouvez utiliser un événement mouseover sur le div pour désactiver la barre de défilement du corps, puis un événement mouseout pour l'activer à nouveau?
Par exemple, le HTML
Et puis le javascript comme ceci:
la source
document.body
place.Voici une façon multi-navigateurs de le faire sur l'axe Y, cela fonctionne sur ordinateur de bureau et mobile. Testé sur OSX et iOS.
la source
scrollTop === maxScroll
parscrollTop >= maxScroll
. Cela semble bizarre sur 1 cas, c'était nécessaireJ'ai écrit pour résoudre ce problème
la source
e.currentTarget
.false
n'a pas besoin d'être spécifiéaddEventListener
car c'est la valeur par défaut. De plus, les comparaisons doivent être de simples inégalités (>
et<
), pas>=
ou<=
.Si je comprends bien votre question, vous voulez empêcher le défilement du contenu principal lorsque la souris est sur un div (disons une barre latérale). Pour cela, la barre latérale peut ne pas être un enfant du conteneur de défilement du contenu principal (qui était la fenêtre du navigateur), pour empêcher l'événement de défilement de remonter jusqu'à son parent.
Cela nécessite éventuellement des modifications de balisage de la manière suivante:
Voyez que cela fonctionne dans cet exemple de violon et comparez cela avec cet exemple de violon qui a un comportement de sortie de souris légèrement différent de la barre latérale.
Voir aussi faire défiler un seul div particulier avec la barre de défilement principale du navigateur .
la source
Comme répondu ici , la plupart des navigateurs modernes prennent désormais en charge la
overscroll-behavior: none;
propriété CSS, qui empêche le chaînage de défilement. Et c'est tout, juste une ligne!la source
overscroll-behavior: contain;
.cela désactive le défilement dans la fenêtre si vous entrez l'élément de sélection. fonctionne comme des charmes.
la source
Vous pouvez désactiver le défilement de la page entière en faisant quelque chose comme ça mais affichez la barre de défilement!
la source
la source
Sur la base de la réponse de ceed, voici une version qui permet l'imbrication d'éléments protégés par défilement. Seul l'élément sur lequel se trouve la souris défilera et il défilera assez facilement. Cette version est également réentrante. Il peut être utilisé plusieurs fois sur le même élément et supprimera et réinstallera correctement les gestionnaires.
Un moyen simple d’utiliser consiste à ajouter une classe, par exemple
scroll-guard
, à tous les éléments de la page sur lesquels vous autorisez le défilement. Ensuite, utilisez$('.scroll-guard').scrollGuard()
pour les garder.la source
Si vous appliquez un
overflow: hidden
style, il devrait disparaîtreedit: en fait j'ai mal lu votre question, cela ne fera que masquer la barre de défilement mais je ne pense pas que ce soit ce que vous recherchez.
la source
Je n'ai pas réussi à faire fonctionner l'une des réponses dans Chrome et Firefox, j'ai donc proposé cette fusion:
la source