Estoy creando un chat usando solicitudes ajax en rieles y estoy tratando de obtener un div para desplazarse hasta el fondo sin mucha suerte.
Estoy envolviendo todo en este div:
#scroll {
height:400px;
overflow:scroll;
}
¿Hay alguna manera de mantenerlo desplazado hacia abajo de forma predeterminada utilizando JS?
¿Hay alguna manera de mantenerlo desplazado hasta el fondo después de una solicitud ajax?
javascript
html
ajax
dMix
fuente
fuente
Esto es mucho más fácil si está utilizando jQuery scrollTop :
fuente
$("#mydiv").scrollTop(function() { return this.scrollHeight; });
Puedes usar el siguiente código:
Para realizar un desplazamiento suave con JQuery:
Vea el ejemplo en JSFiddle
He aquí por qué esto funciona:
Ref: scrollTop , scrollHeight , clientHeight
fuente
usando jQuery animate :
fuente
Obras de jQuery 1.6
https://api.jquery.com/scrollTop/
http://api.jquery.com/prop/
fuente
Método más nuevo que funciona en todos los navegadores actuales :
fuente
desplazamiento suave con Javascript:
document.getElementById('messages').scrollIntoView({ behavior: 'smooth', block: 'end' });
fuente
Si no desea confiar
scrollHeight
, el siguiente código ayuda:fuente
1E10
). Un número menor funcionaUsando jQuery, scrollTop se usa para establecer la posición vertical de la barra de desplazamiento para cualquier elemento dado. También hay un buen complemento jquery scrollTo utilizado para desplazarse con animación y diferentes opciones ( demos )
si desea utilizar el método animado de jQuery para agregar animación mientras se desplaza hacia abajo, verifique el siguiente fragmento:
fuente
Me he encontrado con el mismo problema, pero con una restricción adicional: no tenía control sobre el código que agregaba nuevos elementos al contenedor de desplazamiento. Ninguno de los ejemplos que encontré aquí me permitió hacer eso. Aquí está la solución con la que terminé.
Utiliza
Mutation Observers
( https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ) lo que lo hace utilizable solo en navegadores modernos (aunque existen polyfills)Entonces, básicamente, el código hace exactamente eso:
Hice un violín para demostrar el concepto: https://jsfiddle.net/j17r4bnk/
fuente
<div class="abc"><div data-bind=attr : {'id': myId } ></div></div>
En este código, myId es una variable. ¿Cómo puedo acceder a esta identificación en el script?Javascript o jquery:
Css:
fuente
Encontré esto realmente útil, gracias.
Para la gente de Angular 1.X:
Solo porque el ajuste en elementos jQuery versus elementos HTML DOM se vuelve un poco confuso con angular.
También para una aplicación de chat, encontré que hacer esta asignación después de que se cargaron sus chats es útil, también es posible que también deba abofetear un breve tiempo de espera.
fuente
Anexo pequeño: solo se desplaza, si la última línea ya está visible. Si se desplaza un poco, deja el contenido donde está (atención: no probado con diferentes tamaños de fuente. Esto puede necesitar algunos ajustes dentro de "> = comparación"):
fuente
Solo como un fragmento de bonificación. Estoy usando angular y estaba tratando de desplazar un hilo de mensajes hasta la parte inferior cuando un usuario seleccionaba diferentes conversaciones con los usuarios. Para asegurarse de que el desplazamiento funcione después de que los nuevos datos se hayan cargado en el div con ng-repeat para mensajes, simplemente envuelva el fragmento de desplazamiento en un tiempo de espera.
Eso asegurará que el evento de desplazamiento se active después de que los datos se hayan insertado en el DOM.
fuente
setTimeout(function() { ... }, n)
También puede, usando jQuery, adjuntar una animación al
html,body
documento a través de:$("html,body").animate({scrollTop:$("#div-id")[0].offsetTop}, 1000);
lo que dará como resultado un desplazamiento suave a la parte superior del div con la identificación "div-id".
fuente
Script Java:
document.getElementById('messages').scrollIntoView(false);
Se desplaza a la última línea del contenido presente.
fuente
Esto te permitirá desplazarte hacia abajo con respecto a la altura del documento
fuente
Un método muy simple para esto es establecer
scroll to
la altura del div.fuente
Desplácese hasta el último elemento dentro del div:
fuente
En mi aplicación Angular 6 acabo de hacer esto:
La función clearInterval (intervalo) detendrá el temporizador para permitir el desplazamiento manual arriba / abajo.
fuente
Mi escenario: tenía una lista de cadenas, en la que tenía que agregar una cadena dada por un usuario y desplazarme al final de la lista automáticamente. Había fijado la altura de la visualización de la lista, después de lo cual debería desbordarse.
Intenté la respuesta de @Jeremy Ruten, funcionó, pero se desplazaba hacia el elemento (n-1). Si alguien se enfrenta a este tipo de problema, puede usar la
setTimeOut()
solución alternativa del método. Necesita modificar el código a continuación:Aquí está el enlace StcakBlitz que he creado que muestra el problema y su solución: https://stackblitz.com/edit/angular-ivy-x9esw8
fuente
Sé que esta es una vieja pregunta, pero ninguna de estas soluciones me funcionó. Terminé usando offset (). Top para obtener los resultados deseados. Esto es lo que solía desplazar suavemente la pantalla hasta el último mensaje en mi aplicación de chat:
Espero que esto ayude a alguien más.
fuente
A veces, lo más simple es la mejor solución: no sé si esto ayudará, me ayudó a desplazarme donde siempre quise. Cuanto más alto sea "y =", más se desplazará hacia abajo y, por supuesto, "0" significa arriba, por lo que "1000" podría estar abajo, "2000" o "3000", y así sucesivamente, dependiendo de cuánto tiempo la página es Esto generalmente funciona en un botón con onclick o onmouseover.
fuente
Establezca la distancia desde la parte superior del elemento desplazable para que sea la altura total del elemento.
fuente
Puede usar el método HTML DOM scrollIntoView de esta manera:
fuente
utilizar :
o verifique desplazarse hacia abajo:
fuente
Si esto se hace para desplazarse hasta la parte inferior de la ventana de chat, haga lo siguiente
La idea de desplazarse a un div particular en el chat fue la siguiente
1) Cada div de chat que consiste en Persona, hora y mensaje se ejecuta en un bucle for con chatcontentbox de clase
2) querySelectorAll encuentra todas esas matrices. Podrían ser 400 nodos (400 chats)
3) ir al último
4) scrollIntoView ()
fuente
scrollIntoView
, por lo que no es necesario agregar una más.