2011-10-19 23 views
7

Quiero comprobar si se desplaza la página después de que haya terminado de cargar y estoy usando este código:scrollTop() devuelve 0 en cromo

$(document).ready(function(){ 
    alert($(window).scrollTop()); 
}); 

Funciona bien en Firefox pero Allways vuelve 0 en Chrome. ¿Por qué es esto?

+0

¿Cuál es la situación? ¿Estás revisando para ver si el visitante llegó a tu página con una etiqueta #hash? ¿O está revisando para ver si el visitante se desplazó antes de que el documento terminara de cargarse? ¿o ambos? –

+1

estoy ejecutando una animación en elementos que simplemente se desplazaron a la vista. pero si te desplazas hacia abajo en la página y presionas actualizar. la página recargada se desplaza automáticamente al punto de desplazamiento anterior (prerefreserva), así que quiero saber la posición de desplazamiento de la ventana para determinar qué elementos de la página se han desplazado a la vista e iniciar la animación –

Respuesta

2

$(window).scrollTop() devolverá 0 cuando la ventana no se puede desplazar.

0

Pruebe el siguiente código en una página que tenga un texto y un enlace en la parte inferior de la página. Recuerde que debe tener suficiente texto o líneas en blanco con el fin de desplazar de la página hasta que pueda ver el botón de mi

$(document).ready(function() { 
     alert($(window).scrollTop()); // first load if you did not scroll = 0 
     $("#button").click(function() { alert($(window).scrollTop()); }); 
     // hitting the button that is located on bottom of page 
     // - i had to scroll the page = xxx (68 in may case) 
    }); 

Es normal que en su caso para obtener 0 debido a que la página no se desplaza, el desplazamiento entre su posición y la parte superior de la página es 0.

He intentado en Chrome, FF6, IE9. Espero que haya sido útil.

+1

haciendo clic en el botón # para obtener .scrollTop () no es el problema ... si te desplazas hacia abajo en la página y presionas actualizar. la página se cargará desde el punto en el que se desplazó hasta (actualización previa) ... y esa es la posición que quiero saber. y si lo haces en FF generará el valor corect. en Chrome 14.0 devuelve 0. –

4

En realidad, Firefox es el único navegador que no devuelve 0 para $ (ventana) .scrollTop() en domReady o window.onload. Chrome, Safari e IE Todas Volver 0. La única forma segura de conseguir la posición correcta de la barra de desplazamiento en domready está, como se ha mencionado en otra respuesta anterior, para establecer un controlador de eventos en el evento de desplazamiento de la ventana de la siguiente manera:

$(document).ready(function(){ 
    $(window).scroll(function() { 
     console.log($(window).scrollTop()); 
     $(window).unbind('scroll'); 
    }); 
}); 
+0

Realmente no entiendo por qué las personas rechazaron su respuesta. Esto realmente funciona Además, observé que Chrome activará el evento de desplazamiento dos veces. Primero en la carga normal de la página y una segunda vez si se desplaza a la posición anterior que el usuario tenía (por ejemplo, después de presionar F5 para volver a cargar la página). – Fleshgrinder

2

El Chrome restablece la posición de desplazamiento previa a la actualización una vez que se carga el DOM. Por lo tanto, obtener scrollTop en evento de desplazamiento en lugar de evento listo funcionará.

2

También tuve el problema de que scrollTop() siempre devuelve 0 en Chrome, si lo utilicé en window, en document o en 'html,body'. Finalmente me di cuenta de que era el problema css:

html, body { 
    height: 100%; 
    overflow-x: hidden; 
} 

En realidad, no sé exactamente por qué, porque se pueden eliminar partes de este código y luego vuelve a funcionar. Extraño pero problema resuelto;)

+0

muchas gracias! de hecho es extraño! Trabajé en Safari pero no en Chrome, después de que agregué esto a mi CSS, ¡ambos funcionan en ambos navegadores! – bbnn

0

he tenido el mismo problema, pero fue resuelto mediante la adición de la declaración de documento:

<!DOCTYPE html>