Usando jQuery, me gustaría deshabilitar el desplazamiento del cuerpo:
Mi idea es:
- Conjunto
body{ overflow: hidden;}
- Captura la corriente
scrollTop();/scrollLeft()
- Enlace al evento de desplazamiento del cuerpo, establezca scrollTop / scrollLeft en el valor capturado.
¿Hay una mejor manera?
Actualizar:
Vea mi ejemplo y una razón por la cual, en http://jsbin.com/ikuma4/2/edit
Soy consciente de que alguien estará pensando "¿por qué no solo lo usa position: fixed
en el panel?".
Por favor no sugiera esto ya que tengo otras razones.
Respuestas:
La única forma en que he encontrado para hacer esto es similar a lo que describiste:
Luego, cuando esté listo para permitir el desplazamiento nuevamente, deshaga todo eso.
Editar: no hay razón para que no pueda darte el código ya que me tomé la molestia de desenterrarlo ...
fuente
auto
, se sobrescribirá. Necesitaba preservar la configuración existente, por lo que también agrega algo de sobrecarga.html
ybody
conoverflow: hidden
es insuficiente? Todavía terminamos necesitando el controlador de eventos.Esto deshabilitará completamente el desplazamiento:
Restaurar:
Probado en Firefox y Chrome.
fuente
height: 100%
bloquea efectivamente el desplazamiento en la posición actual sin saltar, al menos en el último Chrome.prueba esto
fuente
$('#element').off('scroll touchmove mousewheel');
body
desplazamiento y permitiría el desplazamiento dentro de otros elementos secundarios que tienenoverflow: scroll
?Solo proporciono un pequeño ajuste a la solución por tfe . En particular, agregué un control adicional para garantizar que no haya cambios en el contenido de la página (también conocido como cambio de página ) cuando la barra de desplazamiento está configurada en
hidden
.Dos funciones Javascript
lockScroll()
yunlockScroll()
se pueden definir, respectivamente, para bloquear y desbloquear el desplazamiento de la página.donde supuse que
<body>
no tiene margen inicial.Tenga en cuenta que, si bien la solución anterior funciona en la mayoría de los casos prácticos, no es definitiva, ya que necesita más personalización para las páginas que incluyen, por ejemplo, un encabezado con
position:fixed
. Veamos este caso especial con un ejemplo. Supongamos tenercon
Entonces, uno debe agregar lo siguiente en funciones
lockScroll()
yunlockScroll()
:Finalmente, tenga en cuenta algunos posibles valores iniciales para los márgenes o rellenos.
fuente
marginRight
ymarginLeft
:)puedes usar este código:
fuente
Para desactivar el desplazamiento, intente esto:
reiniciar:
fuente
He escrito un complemento jQuery para manejar esto: $ .disablescroll .
Impide el desplazamiento desde la rueda del mouse, el movimiento táctil y los eventos de pulsación de teclas, como Page Down.
Hay una demostración aquí .
Uso:
fuente
Puede adjuntar una función para desplazar eventos y evitar su comportamiento predeterminado.
https://jsfiddle.net/22cLw9em/
fuente
Un revestimiento para deshabilitar el desplazamiento, incluido el botón central del mouse.
editar : no hay necesidad de jQuery de todos modos, debajo de lo mismo que arriba en vanilla JS (eso significa que no hay marcos, solo JavaScript):
this.documentElement.scrollTop - estándar
this.body.scrollTop: compatibilidad con IE
fuente
$("body").css("overflow", "hidden");
$("body").css("overflow", "initial");
fuente
¿No puede simplemente establecer la altura del cuerpo al 100% y el desbordamiento oculto? Ver http://jsbin.com/ikuma4/13/edit
fuente
Alguien publicó este código, que tiene el problema de no retener la posición de desplazamiento cuando se restaura. La razón es que las personas tienden a aplicarlo a html y al cuerpo o solo al cuerpo, pero debe aplicarse solo a html. De esta manera, cuando se restaure, se mantendrá la posición de desplazamiento:
Restaurar:
fuente
'overflow': 'auto',
uso'overflow': 'initial',
Esto puede o no funcionar para sus propósitos, pero puede extender jScrollPane para activar otra funcionalidad antes de que se desplace. Acabo de probar esto un poco, pero puedo confirmar que puedes saltar y evitar el desplazamiento por completo. Todo lo que hice fue:
<script type="text/javascript" src="script/jquery.jscrollpane.js"></script>
positionDragY(destY, animate)
funciónEncienda events.html, y verá un cuadro de desplazamiento normal que debido a su intervención de codificación no se desplazará.
Puede controlar todas las barras de desplazamiento del navegador de esta manera (consulte fullpage_scroll.html).
Entonces, presumiblemente, el siguiente paso es agregar una llamada a alguna otra función que se active y haga su magia de anclaje, luego decida si continuar con el desplazamiento o no. También tienes llamadas API para configurar scrollTop y scrollLeft.
Si desea más ayuda, ¡publique donde llegue!
Espero que esto haya ayudado.
fuente
Pongo una respuesta que podría ayudar aquí: jQuery simplemodal deshabilitar desplazamiento
Muestra cómo desactivar las barras de desplazamiento sin cambiar el texto. Puede ignorar las partes sobre simplemodal.
fuente
Si solo desea deshabilitar el desplazamiento con la navegación del teclado, puede anular el evento keydown.
fuente
Prueba este código:
fuente
Puede ocultar la ventana con un div desplazable para evitar el desplazamiento del contenido en una página. Y, al ocultar y mostrar, puede bloquear / desbloquear su desplazamiento.
Haz algo como esto:
fuente
Para las personas que tienen diseños centrados (vía
margin:0 auto;
), aquí hay una combinación de laposition:fixed
solución junto con la solución propuesta de @tfe .Use esta solución si está experimentando un ajuste de página (debido a que la barra de desplazamiento muestra / oculta).
…combinado con…
... y finalmente, el CSS para
.modal-noscroll
...Me atrevería a decir que esto es más de una solución adecuada que cualquiera de las otras soluciones por ahí, pero yo no lo he probado que a fondo todavía ...: P
Editar: tenga en cuenta que no tengo idea de lo mal que esto podría funcionar (léase: explotar) en un dispositivo táctil.
fuente
También puede usar DOM para hacerlo. Digamos que tiene una función que llama así:
¡Y eso es todo! Espero que esto ayude, además de todas las otras respuestas.
fuente
Esto es lo que terminé haciendo:
CoffeeScript:
Javascript:
fuente
No estoy seguro si alguien ha probado mi solución. Este funciona en todo el cuerpo / html, pero sin duda se puede aplicar a cualquier elemento que active un evento de desplazamiento.
Simplemente active y desactive scrollLock según lo necesite.
Aquí está el ejemplo JSFiddle
Espero que esto ayude a alguien.
fuente
Creo que la mejor y limpia solución es:
Y con jQuery:
Esos oyentes de eventos deberían bloquear el desplazamiento. Simplemente quítelos para volver a habilitar el desplazamiento
fuente