2011-09-21 16 views
7

¿Alguien sabe si hay una forma de desactivar la barra de desplazamiento horizontal mediante JavaScript?Deshabilitar desplazamiento horizontal con JavaScript

No deseo usar overflow-x: hidden;.

+3

Realmente, la manera más fácil sería para aplicar el estilo de desbordamiento-x cuando se desea ocultar la barra de desplazamiento y luego retirarlo cuando lo desee para mostrar. – n8wrl

+0

¿Puedes explicar el motivo por el que no quieres usar 'overflow-x: hidden'? – Sparky

+1

Posiblemente porque iOS tiene una tendencia a ignorarlo en muchos casos. –

Respuesta

9

Sin usar la propiedad de CSS overflow-x perfectamente realizable, puede cambiar el tamaño del contenido para que no requiera una barra de desplazamiento, mediante javascript o mediante diseño HTML/CSS.

También puede hacer esto:

window.onscroll = function() { 
window.scrollTo(0,0); 
} 

... que detectará cualquier movimiento en sentido vertical y volver automáticamente el desplazamiento a la parte superior/izquierda. Cabe mencionar que hacer algo como esto seguramente frustrará a sus usuarios.

Lo mejor es crear un entorno donde los elementos de IU no deseados no estén presentes en absoluto (a través del CSS, a través del diseño). El enfoque mencionado anteriormente muestra elementos innecesarios de la interfaz de usuario (barras de desplazamiento) y luego hace que no funcionen de una manera que el usuario espera (desplazarse por la página). Has "roto un contrato" con el usuario. ¿Cómo pueden confiar en que el resto de tu sitio web o aplicación hará las cosas esperadas cuando el usuario realice una acción familiar?

+2

+1 para la nota sobre usuarios frustrados, cuénteme en ese grupo :) – Sander

+1

Normalmente configuro overflow-x: hidden. Pero, por lo general, eso no impide que los navegadores desplacen el objetivo horizontalmente con el panel táctil OSX. –

2

Una manera de evitar que los elementos de desplazamiento hacia abajo en jQuery:

$(element).scroll(function() { 
    this.scrollTop = 0; 
    this.scrollLeft = 0; 
}); 

Bueno, esto no impide en realidad el movimiento en sentido vertical, pero "se desplaza de vuelta" a la esquina superior izquierda de un elemento, similar a La solución de Chris que se creó para la ventana en lugar de elementos individuales. Elimine las líneas scrollTop o scrollLeft según sus necesidades.

+0

Dicen que se desplaza hacia la izquierda y hacia la derecha .. no hacia arriba y hacia abajo .. – Reuben

+1

@Reuben Use 'scrollLeft' en lugar de' scrollTop' a continuación. – Lekensteyn

+0

Yo diría eliminar 'this.scrollTop = 0;' ¡y esta es definitivamente la respuesta! – Reuben

0

Un truco sucio sería superponerse a las barras de desplazamiento: http://jsfiddle.net/dJqgf/.

var overlap = $('<div id=b>'); 

$("#a").wrap($('<div>')); 

$("#a").parent().append(overlap); 

con:

#a { 
    width: 100px; 
    height: 200px; 
    overflow-x: scroll; 
} 

#b { 
    position: relative; 
    left: 0; 
    bottom: 20px; 
    width: 100%; 
    height: 20px; 
    background-color: white; 
} 
Cuestiones relacionadas