2010-08-04 2 views
4

Je veux désactiver le défilement dans une de mes pages. Je ne veux pas écrireJavaScript - Annuler l'événement de défilement

scroll(0,0) ou scrollTo(0,0)

en cas de défilement qui donnera une nature « saccadée ». Je ne peux pas avoir quelque chose comme

event.preventDefault() 

pour annuler l'événement?

+0

Voir http://stackoverflow.com/questions/1459676/prevent-scroll-bubbling-from-element-to-window/1460020#1460020 –

+0

http://stackoverflow.com/questions/4770025/how -to-disable-scrolling-temporairement, bien que ce soit pour désactiver temporairement le défilement, vous pouvez le configurer pour le désactiver de manière permanente. Vous devriez utiliser cela au lieu d'utiliser overflow: caché parce que Chrome a un bug que vous pouvez toujours faire défiler sur le débordement: pages cachées en utilisant la molette de la souris, les touches fléchées, pgup et pgdn, et le défilement tactile si vous êtes sur un appareil tactile. La réponse acceptée dans ce lien fournit une manière de le désactiver efficacement. – Markasoftware

Répondre

5
document.body.style.overflow = 'hidden'; 
+1

Notez qu'un bug de chrome permettra toujours le défilement lorsque le débordement caché est appliqué. – Markasoftware

2

La seule manière acceptable d'empêcher le défilement consiste à adapter le contenu à l'intérieur de la fenêtre. Rien d'autre, et vous êtes en train d'énerver les utilisateurs. Vous pouvez également utiliser position: fixed CSS - mais quand même, s'il est plus grand que la fenêtre, le reste est inutilisable, donc suivez la suggestion # 1.

+0

Il existe de nombreuses utilisations pour couper le contenu. Mon site utilise des transformations css 3d, et pour une raison quelconque une partie inutile s'étend de 10 à 20 pixels au-delà de la fin de la page. – Markasoftware

0

Je me demande si overflow: hidden; fonctionnera en le mettant sur le sélecteur html, body en CSS?

+0

Juste testé dans Firefox 3.6.8 et il fonctionne en le mettant sur l'élément de corps. – dsamarin

+0

Notez qu'un bug de chrome permettra toujours le défilement lorsque le débordement caché est appliqué. – Markasoftware

0

Créez un div qui remplit toute la zone et définissez cette valeur sur overflow: hidden. De cette façon, vous n'obtiendrez jamais de barres de défilement et aucun événement de défilement ne sera créé.

-2

C'est ce qui a fonctionné pour moi. Mémoriser la position de défilement précédente.

onScroll(event){ 
    if(blockScrollFlag){ 
     event.target.scrollTop = prevScrollPosition; 
    } 
} 
+0

Le demandeur a dit de ne pas le faire, car il va créer une nature "jumpy". -1 – Markasoftware

+0

il n'a pas résulté en une nature sautillante pour moi. – shifu

+3

Eh bien, le demandeur a dit spécifiquement de ne pas le faire, peu importe comment il semble pour vous – Markasoftware

Questions connexes