J'ai créé une extension pour le désactiver sur tous les sites. Pour ce faire, j'ai utilisé trois techniques : CSS pur, JS pur et hybride.
La version CSS est similaire aux solutions ci-dessus. La version JS se présente un peu comme suit :
var scroll = function(e) {
// compute state
if (stopScrollX || stopScrollY) {
e.preventDefault(); // this one is the key
e.stopPropagation();
window.scroll(scrollToX, scrollToY);
}
}
document.addEventListener('mousewheel', scroll, false);
Le CSS fonctionne lorsque l'on utilise la position : des éléments fixes et que l'on laisse le navigateur se charger du défilement. L'approche JS est nécessaire lorsque d'autres éléments JS dépendent de la fenêtre (par exemple les événements), ce qui serait bloqué par le CSS précédent (puisqu'il fait défiler le corps au lieu de la fenêtre), et fonctionne en arrêtant la propagation des événements sur les bords, mais doit synthétiser le défilement du composant non périphérique ; l'inconvénient est qu'il empêche certains types de défilement de se produire (ceux qui fonctionnent avec l'approche CSS). L'approche hybride tente d'adopter une approche mixte en désactivant sélectivement le débordement directionnel (CSS) lorsque le défilement atteint un bord (JS) ; en théorie, elle pourrait fonctionner dans les deux cas, mais ce n'est pas tout à fait le cas actuellement, car elle dispose d'une certaine marge de manœuvre à la limite.
Ainsi, en fonction de la mise en œuvre de son site web, il convient d'adopter l'une ou l'autre approche.
Pour plus de détails, voir ici : https://github.com/lloeki/unelastic