Tengo un div, con una barra de desplazamiento, cuando llega al final, mi página comienza a desplazarse. ¿Hay alguna forma de que pueda detener este comportamiento?
javascript
html
Jeevan
fuente
fuente
Respuestas:
Puede desactivar el desplazamiento de toda la página haciendo algo como esto:
fuente
Encontré la solución.
http://jsbin.com/itajok
Esto es lo que necesitaba.
Y este es el código.
http://jsbin.com/itajok/edit#javascript,html
Utiliza un complemento de jQuery.
Actualización por aviso de baja
Desde jquery-mousewheel :
Entonces,
event.deltaY
ahora debe usarse:Manifestación
fuente
La solución seleccionada es una obra de arte. Pensé que era digno de un complemento ...
Este ha sido un inconveniente continuo para mí y esta solución es tan limpia en comparación con otros trucos que he visto. Curioso por saber más sobre cómo funciona y qué tan ampliamente apoyado sería, pero saluda a Jeevan y a quienquiera que originalmente se le ocurrió esto. Por cierto, ¡el editor de respuestas de stackoverflow necesita esto!
ACTUALIZAR
Creo que esto es mejor porque no intenta manipular el DOM en absoluto, solo evita el burbujeo condicionalmente ...
Funciona muy bien en Chrome y mucho más simple que otras soluciones ... avíseme cómo le va en otros lugares ...
VIOLÍN
fuente
wheel
evento¿Podría usar un evento de mouseover en el div para deshabilitar la barra de desplazamiento del cuerpo y luego un evento de mouseout para activarlo nuevamente?
Por ejemplo, el HTML
Y luego el javascript así:
fuente
document.body
en su lugar.Aquí hay una forma de hacer esto en varios navegadores en el eje Y, funciona en computadoras de escritorio y dispositivos móviles. Probado en OSX e iOS.
fuente
scrollTop === maxScroll
byscrollTop >= maxScroll
. Parece ser extraño en 1 caso, era necesarioEscribí resolviendo este problema
fuente
e.currentTarget
.false
no es necesario especificarlo,addEventListener
ya que es el valor predeterminado. Además, las comparaciones deben ser simples desigualdades (>
y<
), no>=
o<=
.Si entiendo su pregunta correctamente, entonces desea evitar el desplazamiento del contenido principal cuando el mouse está sobre un div (digamos una barra lateral). Para eso, la barra lateral puede no ser un elemento secundario del contenedor de desplazamiento del contenido principal (que era la ventana del navegador), para evitar que el evento de desplazamiento se propague a su elemento principal.
Esto posiblemente requiera algunos cambios de marcado de la siguiente manera:
Vea que está funcionando en este violín de muestra y compárelo con este violín de muestra que tiene un comportamiento de salida del mouse ligeramente diferente de la barra lateral.
Consulte también desplazar solo un div en particular con la barra de desplazamiento principal del navegador .
fuente
Como se respondió aquí , la mayoría de los navegadores modernos ahora admiten la
overscroll-behavior: none;
propiedad CSS, que evita el encadenamiento de desplazamiento. Y eso es todo, ¡solo una línea!fuente
overscroll-behavior: contain;
.esto deshabilita el desplazamiento en la ventana si ingresa el elemento selector. funciona como amuletos.
fuente
Puede desactivar el desplazamiento de toda la página haciendo algo como esto, ¡pero mostrando la barra de desplazamiento!
fuente
fuente
Basado en la respuesta de ceed, aquí hay una versión que permite anidar elementos protegidos por desplazamiento. Solo el elemento sobre el que se encuentra el mouse se desplazará y se desplazará con bastante suavidad. Esta versión también es reentrante. Se puede usar varias veces en el mismo elemento y eliminará y reinstalará correctamente los controladores.
Una forma fácil de usar es agregar una clase, por ejemplo
scroll-guard
, a todos los elementos de la página en los que permite desplazarse. Luego úsalos$('.scroll-guard').scrollGuard()
para protegerlos.fuente
Si aplicas un
overflow: hidden
estilo, debería desaparecer.editar: de hecho, leí mal tu pregunta, eso solo ocultará la barra de desplazamiento, pero no creo que eso sea lo que estás buscando.
fuente
No pude hacer que ninguna de las respuestas funcionara en Chrome y Firefox, así que se me ocurrió esta fusión:
fuente