Tengo un div de solo 300 píxeles de tamaño y quiero que cuando la página se cargue, desplácese hasta la parte inferior del contenido. Este div tiene contenido agregado dinámicamente y debe mantenerse desplazado hasta el fondo. Ahora, si el usuario decide desplazarse hacia arriba, no quiero que salte hacia abajo hasta que el usuario vuelva a desplazarse hacia abajo
¿Es posible tener un div que permanezca desplazado hacia la parte inferior a menos que el usuario se desplace hacia arriba y cuando el usuario retroceda hacia la parte inferior necesita mantenerse en la parte inferior incluso cuando se agrega nuevo contenido dinámico? ¿Cómo haría para crear esto?
{position : relative; bottom:0;}
. Elimine la propiedad css una vez que el usuario tenga desplazamiento.Respuestas:
Esto podría ayudarte:
[EDITAR], para que coincida con el comentario ...
cada vez que se agrega contenido, llame a la función updateScroll () o configure un temporizador:
si desea actualizar SÓLO si el usuario no se movió:
fuente
setInterval
un problema tan leve como este.Pude hacer que esto funcionara solo con CSS.
El truco es usar
display: flex;
yflex-direction: column-reverse;
El navegador trata la parte inferior como si fuera la parte superior. Suponiendo que los navegadores que está buscando son compatibles
flex-box
, la única advertencia es que el marcado debe estar en orden inverso.Aquí hay un ejemplo de trabajo. https://codepen.io/jimbol/pen/YVJzBg
fuente
overflow:auto; display:flex; flex-direction:column-reverse;
el envoltorio externo en lugar del envoltorio interno.Acabo de implementar esto y quizás puedas usar mi enfoque.
Digamos que tenemos el siguiente HTML:
Luego podemos verificar si se desplazó hacia abajo con:
scrollHeight le proporciona la altura del elemento, incluida cualquier área no visible debido al desbordamiento. clientHeight le proporciona la altura CSS o, dicho de otro modo, la altura real del elemento. Ambos métodos devuelven la altura sin
margin
, por lo que no debe preocuparse por eso. scrollTop le da la posición del desplazamiento vertical. 0 es superior y max es la altura de desplazamiento del elemento menos la altura del elemento en sí. Cuando se usa la barra de desplazamiento, puede ser difícil (para mí estaba en Chrome) obtener la barra de desplazamiento hasta el final. así que agregué una imprecisión de 1px. EntoncesisScrolledToBottom
será cierto incluso si la barra de desplazamiento es 1px desde la parte inferior. Puede configurar esto para lo que le parezca correcto.Entonces es simplemente una cuestión de establecer el scrollTop del elemento en la parte inferior.
He hecho un violín para que muestres el concepto: http://jsfiddle.net/dotnetCarpenter/KpM5j/
EDITAR: Fragmento de código agregado para aclarar cuándo
isScrolledToBottom
estrue
.Pegue la barra de desplazamiento hacia abajo
fuente
if(!isScrolledToBottom)
: la prueba me parece incorrecta (y no funcionó en mi código hasta que lo arreglé).out.scrollHeight - out.clientHeight <= out.scrollTop + 1
. ¿Estás usando relleno en tu CSS?document.getScrollingElement
como se sugiere aquí: stackoverflow.com/questions/36227559/scrolltop-always-returns-0/…Demostración en vivo: http://jsfiddle.net/KGfG2/
fuente
fuente
En 2020, puede usar css snap , pero antes de Chrome 81 el cambio de diseño no activará el re-snap , una interfaz de usuario de css chat pura funciona en Chrome 81, también puede marcar ¿Puedo usar CSS snap ?
Esta demostración tomará el último elemento si está visible, desplácese hacia abajo para ver el efecto.
fuente
Run code snippet
para ver el efecto (PD: siRun code snippet
no funciona, intente esto: https://jsfiddle.net/Yeshen/xm2yLksu/3/ )Como funciona:
El desbordamiento predeterminado es desplazarse de arriba a abajo.
transform: rotate(180deg)
puede hacer que se desplace o cargue el bloque dinámico de abajo hacia arriba.https://blog.csdn.net/yeshennet/article/details/88880252
fuente
Run code snippet
, vea directamente el efecto.Esto calculará la posición ScrollTop desde la altura de
#yourDivID
uso de la$(document).height()
propiedad, de modo que incluso si se agregan contenidos dinámicos al div, el desplazador siempre estará en la posición inferior. Espero que esto ayude. Pero también tiene un pequeño error, incluso si nos desplazamos hacia arriba y dejamos el puntero del mouse del desplazador, automáticamente se colocará en la posición inferior. Si alguien pudiera corregir eso, también sería bueno.fuente
Aquí está mi versión basada en la respuesta de dotnetCarpenter. Mi enfoque es un jQuery puro y nombré las variables para aclarar un poco las cosas. Lo que sucede es que si la altura del contenido es mayor que el contenedor, desplazamos la distancia adicional hacia abajo para lograr el resultado deseado.
Funciona en IE y Chrome.
fuente
La respuesta de Jim Hall es preferible porque, si bien no se desplaza hacia abajo cuando se desplaza hacia arriba, también es CSS puro.
Sin embargo, lamentablemente, esta no es una solución estable: en Chrome (posiblemente debido al problema de 1 px descrito anteriormente por dotnetCarpenter), se
scrollTop
comporta de manera incorrecta por 1 píxel, incluso sin interacción del usuario (al agregar el elemento). Puede establecerscrollTop = scrollHeight - clientHeight
, pero eso mantendrá el div en posición cuando se agregue otro elemento, es decir, la función "mantenerse en la parte inferior" ya no funciona.En resumen, agregar una pequeña cantidad de Javascript (suspiro) solucionará esto y cumplirá con todos los requisitos:
Algo así como https://codepen.io/anon/pen/pdrLEZ this (ejemplo de Coo), y después de agregar un elemento a la lista, también lo siguiente:
donde 29 es la altura de una línea.
Entonces, cuando el usuario se desplaza hacia arriba media línea (si eso es posible?), El Javascript lo ignorará y se desplazará hacia la parte inferior. Pero supongo que esto es descuidado. Y repara la cosa de Chrome 1 px.
fuente
Aquí hay una solución basada en una publicación de blog de Ryan Hunt . Depende de la
overflow-anchor
propiedad CSS, que fija la posición de desplazamiento a un elemento en la parte inferior del contenido desplazado.Tenga en cuenta que
overflow-anchor
actualmente no funciona en Safari o Edge, por lo que esta solución no funciona actualmente en todos los navegadores.fuente
Puedes usar algo como esto,
fuente
Así es como lo enfoqué. Mi altura div es de 650 px. Decidí que si la altura de desplazamiento está dentro de 150 px de la parte inferior, entonces desplácese automáticamente. De lo contrario, déjelo al usuario.
fuente