Vuelve a la parte superior del div desplazable

121
<div id="containerDiv"></div>
#containerDiv {
  position: absolute;
  top: 0px;
  width: 400px;
  height: 100%;
  padding: 5px;
  font-size: .875em;
  overflow-y: scroll;
}
document.getElementById("containerDiv").innerHTML = variableLongText;

¿Cómo restablecer la posición de desplazamiento hacia la parte superior del contenedor div la próxima vez?

Estoy aquí
fuente

Respuestas:

206
var myDiv = document.getElementById('containerDiv');
myDiv.innerHTML = variableLongText;
myDiv.scrollTop = 0;

Vea el scrollTopatributo.

Phrogz
fuente
Intenté pero no funcionó. Cuando se carga un variableLongtext en el contenedor div y estoy mirando en el medio, luego deslice el dedo hasta la nueva variableLongtext, aparecerá en el contenedor, pero no estaremos mirando en la parte superior, ya se desplazará abajo un poco.
Llego
2
@ s12345 Será mejor que cree un caso de prueba reproducible que nos muestre su problema (por ejemplo, en jsfiddle.net ) y diga en qué sistema operativo / navegador / versión está experimentando esto.
Phrogz
2
Perdón por mi error ... ¡funciona! Me confundí con dos divs similares.
aquí
63

Otra forma de hacerlo con una animación suave es así.

$("#containerDiv").animate({ scrollTop: 0 }, "fast");
Mahmoud Ibrahim
fuente
7
Funciona bien, pero por favor, no utilice slow, es tan ... lento!
Pascal
1
En lugar de pasar slowcomo segundo argumento. Puede pasar un número entero que sería el número de milisegundos para que se complete la animación.
Sushant Gupta
2
Lo cambié a rápido :)
Mahmoud Ibrahim
1
¡La mejor respuesta! ¡Gracias!
YogaPanda
1
Esto funciona bien si está utilizando jquery. Si está utilizando mecanografiado angular (javascript simple), esto no funcionará. ¿Cómo se puede lograr esto con JavaScript simple?
Babulaas
27

Probé las respuestas existentes a esta pregunta, y ninguna de ellas funcionó en Chrome para mí. Lo que funcionó fue ligeramente diferente:

$('body, html, #containerDiv').scrollTop(0);
Producciones Sunnyside
fuente
16

scrollTo

window.scrollTo(0, 0);

es la solución definitiva para desplazar las ventanas hacia la parte superior; la mejor parte es que no requiere ningún selector de ID e incluso si usamos la estructura IFRAME, funcionará extremadamente bien.

El método scrollTo () desplaza el documento a las coordenadas especificadas.
window.scrollTo (xpos, ypos);
Número de xpos requerido. La coordenada a la que desplazarse, a lo largo del eje x (horizontal), en píxeles
ypos Número requerido. La coordenada a la que desplazarse, a lo largo del eje y (vertical), en píxeles

jQuery

Otra opción para hacer lo mismo es usar jQuery y le dará un aspecto más suave al mismo

$('html,body').animate({scrollTop: 0}, 100);

donde 0 después de scrollTop especifica la posición de la barra de desplazamiento vertical en el píxel y el segundo parámetro es un parámetro opcional que muestra el tiempo en microsegundos para completar la tarea.

Gaurav Tiwari
fuente
1
¿Qué pasa si solo queremos desplazar un div interno hacia la parte superior? Esto finalmente no funcionará.
John Lord
1
Los elementos también tienen el método .scrollTo, puedes hacerlodocument.getElementById('scroller').scrollTo(0,0)
Mojimi
15

Esto funcionó para mí:

document.getElementById('yourDivID').scrollIntoView();
Rajat
fuente
Esta es mi solución preferida. Para una transición suave, agregue esto:document.getElementById("yourDivID").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"})
Chris
Además, tenga en cuenta que scollIntoViewsolo funciona si lo llama en el elemento que se va a desplazar. En otras palabras, no lo llame en el elemento que desea desplazarse a , lo llaman en el elemento que desea desplazarse.
Chris
9

Para aquellos que aún no pueden hacer que esto funcione, asegúrese de que el elemento desbordado se muestre antes de usar la función jQuery .

Ejemplo:

$('#elem').show();
$('#elem').scrollTop(0);
François Noël
fuente
1
Salvavidas! Estaba empezando a perder las ganas de vivir con scrollTop ¡no funcionaba! Tuve que poner mi llamada scrollTop en una función setTimeout.
AVFC_Bubble88
¡Siento lo mismo! Estaba trabajando en un cuadro de diálogo modal de arranque. Tuve que configurar un evento para el modal que no restableció la barra de desplazamiento hasta que el modal dejó de animarse. Este es el código que utilicé: $ ('# add_modal'). On ('shown.bs.modal', function (e) {$ ('div.border'). ScrollTop (0);});
Irv Lennert
2

Para mí, la forma scrollTop no funcionó, pero encontré otra:

element.style.display = 'none';
setTimeout(function() { element.style.display = 'block' }, 100);

Sin embargo, no verifiqué el tiempo mínimo para una representación css confiable, 100 ms podría ser excesivo.

AlexTR
fuente
2

Si desea desplazarse con una transición suave, ¡puede usar esto!

(Vanilla JS)

const tabScroll = document.getElementById("tabScroll");
window.scrollTo({
  'behavior': 'smooth',
  'left': 0,
  'top': tabScroll.offsetTop - 80
});

Si sus usuarios objetivo son Chrome y Firefox , ¡esto es bueno! Pero, lamentablemente, este método no es lo suficientemente compatible con todos los navegadores. Chequea aquí

¡¡Espero que esto ayude!!

Ashwin
fuente
2

Según la respuesta de François Noël "Para aquellos que aún no pueden hacer que esto funcione, asegúrese de que el elemento desbordado se muestre antes de usar la función jQuery".

Había estado trabajando en un modal de arranque que menciono repetidamente con permisos de cuenta en un div que se desborda en la dimensión y. Mi problema era que estaba tratando de usar la función jquery .scrollTop (0) y no funcionaría sin importar cómo intentara hacerlo. Tuve que configurar un evento para el modal que no restableció la barra de desplazamiento hasta que el modal dejó de animarse. El código que finalmente funcionó para mí está aquí:

    $('#add-modal').on('shown.bs.modal', function (e) {
        $('div.border').scrollTop(0);
    });
Irv Lennert
fuente
1

Si el contenido html desborda una sola ventana gráfica, esto funcionó para mí usando solo javascript:

document.getElementsByTagName('body')[0].scrollTop = 0;

Saludos,

Ruben
fuente
1

Esta es la única forma en que funcionó para mí, con una transición de desplazamiento suave:

  $('html, body').animate({
    scrollTop: $('#containerDiv').offset().top,
  }, 250);
Fred K
fuente
1

Cuando obtenga un elemento por nombre de clase, no olvide que el valor de retorno es una matriz; De ahí este código:

document.getElementByClassName("dropdown-menu").scrollTop = 0

No funcionaría. En su lugar, utilice el código siguiente.

document.getElementByClassName("dropdown-menu")[0].scrollTop = 0

Supuse que otras personas podrían encontrar un problema similar al mío; así que esto debería funcionar.

Mahsan Nourani
fuente
0

estos dos códigos funcionaron para mí como un encanto, este primero tomará para desplazarse a la parte superior de la página, pero si desea desplazarse a algún div específico, use el segundo con su id de div.

$('body, html, #containerDiv').scrollTop(0);
document.getElementById('yourDivID').scrollIntoView();

Si desea desplazarse por el nombre de una clase, use el siguiente código

var $container = $("html,body");
var $scrollTo = $('.main-content');

$container.animate({scrollTop: $scrollTo.offset().top - $container.offset().top + $container.scrollTop(), scrollLeft: 0},300);
Amir shah
fuente
0

El ID debe tener el ID del div correspondiente que tiene la propiedad overflow css.

document.querySelector('#YOUR_OVERFLOWED_DIV').scrollTop = 0;

csandreas1
fuente