Preciso detectar se um usuário está rolado até o final de uma página. Se eles estiverem na parte inferior da página, quando eu adicionar novo conteúdo à parte inferior, rolarei automaticamente para a nova parte inferior. Se eles não estiverem na parte inferior, eles estão lendo o conteúdo anterior mais alto na página, então eu não quero rolar automaticamente eles, pois eles querem ficar onde estão.
Como posso detectar se um usuário está rolado para a parte inferior da página ou se ele rolou mais alto na página?
javascript
Andrew
fonte
fonte
Respostas:
Ver demonstração
fonte
document.documentElement.scrollTop
vez dewindow.scrollY
para o IE. Não tenho certeza de quais versões, se houver, do IE suportamwindow.scrollY
.Código atualizado para todos os principais navegadores de suporte (incluindo IE10 e IE11)
O problema com a resposta atualmente aceita é que
window.scrollY
não está disponível no IE.Aqui está uma citação de mdn sobre o scrollY:
E um trecho de trabalho:
Mostrar snippet de código
Nota para mac
Com base no comentário de @ Raphaël, houve um problema no mac devido a um pequeno deslocamento.
A seguinte condição atualizada funciona:
fonte
(window.innerHeight + window.pageYOffset) >= document.body.offsetHeight - 2
(window.innerHeight + Math.ceil(window.pageYOffset + 1)) >= document.body.offsetHeight
.A resposta aceita não funcionou para mim. Isso fez:
Se você deseja oferecer suporte a navegadores mais antigos (IE9), use o alias
window.pageYOffset
que possui um suporte um pouco melhor.fonte
Eu estava procurando uma resposta, mas não encontrei uma exata. Aqui está uma solução javascript pura que funciona com o Firefox, IE e Chrome mais recentes no momento desta resposta:
fonte
((document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight)
em vez de apenasdocument.body.scrollHeight
para a conta para os casos em html / corpo estão definidos para height: 100%Isso funciona
Se você deseja oferecer suporte a navegadores mais antigos (IE9), substitua window.scrollY por window.pageYOffset
fonte
Eu apenas comecei a olhar para isso e as respostas aqui me ajudaram, então obrigado por isso. Expandi um pouco para que o código esteja seguro desde o IE7:
Espero que isso seja útil para alguém.
Aqui, tem um violino;)
fonte
Se você estiver configurando
height: 100%
algum contêiner<div id="wrapper">
, o seguinte código funcionará (testado no Chrome):fonte
Esta resposta irá corrigir casos extremos, porque
pageYOffset
édouble
enquantoinnerHeight
eoffsetHeight
sãolong
, portanto, quando o navegador fornece as informações, você pode ter um pixel curto. Por exemplo: na parte inferior da página, temosverdade
window.innerHeight = 10.2
verdade
window.pageYOffset = 5.4
verdade
document.body.offsetHeight = 15.6
Nosso cálculo passa a ser: 10 + 5,4> = 16, o que é falso
Para consertar isso, podemos fazer
Math.ceil
opageYOffset
valor.Espero que ajude.
fonte
se você ama jquery
fonte
Você pode ver o infinito pergaminho do jquery:
http://www.infinite-scroll.com/infinite-scroll-jquery-plugin/
Parece que ele faz o que você está pedindo, supondo que você esteja disposto a usar a biblioteca jquery e não esperando um método JS puro e estrito.
fonte
Surpreendentemente, nenhuma das soluções funcionou para mim. Eu acho que é porque eu
css
estava bagunçado ebody
não envolvia todo o conteúdo ao usá-loheight: 100%
(ainda não sei por que). No entanto, ao procurar uma solução, encontrei algo bem ... basicamente o mesmo, mas talvez valha a pena olhar - sou iniciante em programação, desculpe se está fazendo o mesmo mais devagar, tem menos suporte ou algo do tipo aquele...fonte
fonte
Este código funcionou para mim no Firefox e IE também.
fonte
Usando
defaultView
edocumentElement
com o snippet de código funcional incorporado:fonte
Você pode verificar se o resultado combinado da altura da janela e da parte superior da rolagem é maior que o do corpo
if (window.innerHeight + window.scrollY >= document.body.scrollHeight) {}
fonte
Eu tive que criar uma maneira (em Java) de rolar sistematicamente para baixo, procurando por um componente para o qual eu não conhecia o XPath correto (longa história, então apenas continue). Como acabei de afirmar, eu precisava rolar para baixo enquanto procurava por um componente e parar quando o componente foi encontrado ou na parte inferior da página.
O seguinte trecho de código controla a rolagem para baixo na parte inferior da página:
A propósito, a janela é maximizada antes que esse trecho de código seja executado.
fonte
A resposta aceita não funcionou para mim. Isso fez:
fonte
Encontrei duas soluções que funcionaram para mim:
E o outro:
fonte