Necesito detectar si un usuario se desplaza al final de una página. Si están en la parte inferior de la página, cuando agregue contenido nuevo a la parte inferior, los desplazaré automáticamente a la parte inferior nueva. Si no están en la parte inferior, están leyendo el contenido anterior más arriba en la página, por lo que no quiero desplazarlos automáticamente ya que quieren permanecer donde están.
¿Cómo puedo detectar si un usuario se desplaza al final de la página o si se desplaza más arriba en la página?
javascript
Andrés
fuente
fuente
Respuestas:
Ver demo
fuente
document.documentElement.scrollTop
lugar dewindow.scrollY
para IE. No está seguro de lo que, en su caso, las versiones de IE de la ayudawindow.scrollY
.Código actualizado para todos los principales navegadores compatibles (incluye IE10 e IE11)
El problema con la respuesta aceptada actual es que
window.scrollY
no está disponible en IE.Aquí hay una cita de mdn con respecto a scrollY:
Y un fragmento de trabajo:
Mostrar fragmento de código
Nota para mac
Según el comentario de @ Raphaël, hubo un problema en mac debido a un pequeño desplazamiento.
La siguiente condición actualizada funciona:
fuente
(window.innerHeight + window.pageYOffset) >= document.body.offsetHeight - 2
(window.innerHeight + Math.ceil(window.pageYOffset + 1)) >= document.body.offsetHeight
.La respuesta aceptada no funcionó para mí. Esto hizo:
Si está buscando admitir navegadores antiguos (IE9) use el alias
window.pageYOffset
que tiene un soporte ligeramente mejor.fuente
Estaba buscando una respuesta pero no encontré una exacta. Aquí hay una solución javascript pura que funciona con las últimas versiones de Firefox, IE y Chrome en el momento de esta respuesta:
fuente
((document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight)
lugar de solodocument.body.scrollHeight
para tener en cuenta los casos en que html / body están configurados en altura: 100%Esto funciona
Si está buscando admitir navegadores antiguos (IE9), reemplace window.scrollY con window.pageYOffset
fuente
Acabo de empezar a mirar esto y las respuestas aquí me ayudaron, así que gracias por eso. Me he expandido un poco para que el código esté seguro hasta IE7:
Espero que esto sea útil para alguien.
Aquí, tiene un violín;)
fuente
Si está configurando
height: 100%
un contenedor<div id="wrapper">
, el siguiente código funciona (probado en Chrome):fuente
Esta respuesta solucionará casos extremos, esto es porque
pageYOffset
esdouble
whileinnerHeight
yoffsetHeight
arelong
, por lo que cuando el navegador le brinda la información, es posible que le falte un píxel. Por ejemplo: en la parte inferior de la página tenemoscierto
window.innerHeight = 10.2
cierto
window.pageYOffset = 5.4
cierto
document.body.offsetHeight = 15.6
Nuestro cálculo se convierte en: 10 + 5.4> = 16 que es falso
Para solucionar esto podemos hacer
Math.ceil
en elpageYOffset
valor.Espero que ayude.
fuente
si amas a jquery
fuente
Puedes mirar el desplazamiento infinito de jquery:
http://www.infinite-scroll.com/infinite-scroll-jquery-plugin/
Parece que hace lo que está pidiendo, suponiendo que esté dispuesto a usar la biblioteca jquery y sin esperar un estricto método JS puro.
fuente
Sorprendentemente, ninguna de las soluciones funcionó para mí. Creo que es porque mi
css
estaba en mal estado ybody
no envolvía todo el contenido cuando lo usabaheight: 100%
(todavía no sé por qué). Sin embargo, mientras buscaba una solución, se me ocurrió algo bien ... básicamente lo mismo, pero tal vez valga la pena mirarlo: soy nuevo en la programación, así que lo siento si está haciendo lo mismo más lento, es menos compatible o algo así ese...fuente
fuente
Este código también funcionó para mí en Firefox e IE.
fuente
Uso
defaultView
ydocumentElement
con fragmento de código funcional incrustado:fuente
Puede verificar si el resultado combinado de la altura de la ventana y la parte superior de desplazamiento es mayor que el del cuerpo
if (window.innerHeight + window.scrollY >= document.body.scrollHeight) {}
fuente
Tuve que encontrar una forma (en Java) de desplazarme sistemáticamente hacia abajo en busca de un componente para el que no conocía el XPath correcto (historia larga, así que solo sigue el juego). Como acabo de decir, necesitaba desplazarme hacia abajo mientras buscaba un componente y detenerme cuando se encontraba el componente o se llegaba al final de la página.
El siguiente fragmento de código controla el desplazamiento hacia la parte inferior de la página:
Por cierto, la ventana se maximiza antes de que se ejecute este fragmento de código.
fuente
La respuesta aceptada no funcionó para mí. Esto hizo:
fuente
Encontré dos soluciones que me funcionaron:
Y el otro:
fuente