54 votes

jQuery désactive le défilement lorsque la souris passe sur une div absolue

J'essaie de désactiver la fonction de défilement de la souris de la fenêtre lorsque la souris survole le div - de sorte que seul le défilement du div soit activé - et lorsque la souris s'éloigne du div - le défilement de la fenêtre est à nouveau appliqué. Le div est positionné de manière absolue.

J'ai vu ce message utiliser jquery pour désactiver la fonction de la roulette de la souris lorsque le curseur de la souris se trouve à l'intérieur d'une div ? mais il ne semble pas apporter de réponse - d'où ma question.

Je suppose qu'il s'agirait de quelque chose comme ceci (si seulement ces méthodes existaient) :

$('#container').hover(function() {
     $(window).scroll().disable();
     $(this).scroll().enable();
}, function() {
     $(window).scroll().enable();
});

1 votes

J'ai du mal à comprendre votre question, n'est-ce pas le comportement par défaut ? Lorsque vous survolez une "div" et que vous avez "overflow:scroll", cela fait simplement défiler la "div", et non la fenêtre, ou essayez-vous de faire en sorte que, par exemple, lorsque le défilement est terminé, la fenêtre ne défile toujours pas ?

1 votes

Je soupçonne qu'il cherche exactement ce que vous décrivez. Sa div positionnée de manière absolue défile, mais lorsqu'elle finit de défiler, il ne veut pas que la fenêtre principale défile. C'est un problème que je rencontre souvent lorsque j'édite des articles sous Wordpress. Tout sort de l'écran. Lorsque l'on travaille dans un éditeur, il est bon que le travail reste en place !

0 votes

Oui - c'est exactement ce que je voulais dire - merci @mrtsherman pour cet éclaircissement.

0voto

Max Bileschi Points 1618

La réponse de @mrtsherman a presque fonctionné pour moi, mais il y avait une changement radical avec le défilement passif dans Chrome.

preventScrollingEl = document.getElementById("WHATEVER");
preventScrollingEl.addEventListener('mousewheel', preventScrolling, {passive: false});
preventScrollingEl.addEventListener('DOMMouseScroll', preventScrolling, {passive: false});

function preventScrolling(event) {
  var scrollTo = null;

  if (event.type == 'mousewheel') {
    scrollTo = (event.wheelDelta * -1);
  } else if (event.type == 'DOMMouseScroll') {
    scrollTo = 40 * event.detail;
  }

  if (scrollTo) {
    event.preventDefault();
    $(this).scrollTop(scrollTo + $(this).scrollTop());
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X