2010-11-04 8 views
64

¿Cómo puedo obtener y configurar la posición de desplazamiento de la página web actual?¿Cómo obtener y configurar la posición de desplazamiento de la página web actual?

Tengo un formulario largo que necesita actualizarse en función de las acciones/entradas del usuario. Cuando esto sucede, la página se restablece a la parte superior, lo que es molesto para los usuarios, porque tienen que desplazarse hacia abajo hasta el punto en el que estaban.

Si pudiera capturar la posición de desplazamiento actual (en una entrada oculta) antes de que la página se recargue, podría volver a configurarla después de volver a cargarla.

+0

no es una forma impulsada en AJAX no es una mejor manera de prevenir los efectos (y, por supuesto, proporcionar una alternativa en caso de XHR no está disponible)? Las recargas de página tendrán la página para saltar a la cima y viceversa, una peculiaridad que puede ser molesta. –

Respuesta

42

Está buscando la propiedad document.documentElement.scrollTop.

+0

gracias, encontré esto: http://articles.sitepoint.com/article/javascript-from-scratch/6 y modifiqué 'getScrollingPosition()' para almacenar los valores en variables ocultas. Luego en el html de la página actualizada utilizo ' xyz

+37

Estoy encontrando, en Chrome en Ubuntu al menos , that 'document.documentElement.scrollTop' siempre devuelve 0.' document.body.scrollTop', sin embargo, parece funcionar. Un Firefox en Ubuntu, por el contrario, lo contrario es cierto - obtienes 0 con 'body' y la cantidad correcta con 'documentElement'. ¿Alguna idea de lo que ofrece? – tobek

+1

Use scrollX http://dev.w3.org/csswg/cssom-view/#dom-window-scrollx – Adria

5

Fui con la solución de almacenamiento local de HTML5 ... Todos mis enlaces llamar a una función que establece esta antes de cambiar window.location:

localStorage.topper = document.body.scrollTop; 

y cada página tiene esto en onLoad del cuerpo:

if(localStorage.topper > 0){ 
    window.scrollTo(0,localStorage.topper); 
    } 
+2

Sería más elegante usar setItem() y getItem() de localStorage y, en su lugar, hacer una copia de seguridad de la posición de desplazamiento en cada enlace, almacenarla una vez al salir de la página: window.addEventListener ("beforeunload", function() {localStorage.setItem ("scrolly", document.documentElement.scrollTop || document.body.scrollTop);}); – StanE

87

la respuesta aceptada actualmente es incorrecto - document.documentElement.scrollTop siempre devuelve 0 en Chrome. Esto se debe a que WebKit usa body para realizar un seguimiento del desplazamiento, mientras que Firefox e IE usan html.

para obtener la posición actual, que quiere:

document.documentElement.scrollTop || document.body.scrollTop 

Es posible ajustar la posición actual hasta 1000 píxeles abajo de la página, así:

document.documentElement.scrollTop = document.body.scrollTop = 1000; 

O, usando jQuery (animarlo mientras '¡a ello!):

$("html, body").animate({ scrollTop: "1000px" }); 
+3

La respuesta de gyo, sugiriendo 'window.pageYOffset' es más clara si está utilizando los métodos' window.scrollBy() 'o' window.scrollTo() '. – igorsantos07

11

Hay algunas incoherencias en la forma en que los navegadores exponen el coordinador de desplazamiento de la ventana actual Ates. Google Chrome en Mac y iOS parecen devolver siempre 0 al usar document.documentElement.scrollTop o jQuery's $(window).scrollTop().

Sin embargo, funciona constantemente con:

// horizontal scrolling amount 
window.pageXOffset 

// vertical scrolling amount 
window.pageYOffset 
Cuestiones relacionadas