Eu tenho uma caixa de div (chamada de fluxo) com uma quantidade variável de conteúdo dentro. O estouro da caixa div está definido como automático.
Agora, o que estou tentando fazer é que, quando o uso rolar para a parte inferior desta caixa DIV, carregar mais conteúdo na página, eu sei como fazer isso (carregar o conteúdo), mas não sei como detectar quando o usuário rolou para a parte inferior da tag div? Se eu quisesse fazer isso por toda a página, pegaria .sollollTop e subtrairia isso de .height.
Mas parece que não consigo fazer isso aqui?
Eu tentei tirar .scrollTop do fluxo e, em seguida, agrupar todo o conteúdo dentro de uma div chamada inner, mas se eu pegar a innerHeight of flux, ela retornará 564px (a div está definida como 500 como altura) e a altura de 'innner' retorna 1064 e a barra de rolagem, quando na parte inferior da div diz 564.
O que eu posso fazer?
fonte
innerHeight()
com que o relatório seja decimal. No caso de um usuário diminuir o zoom, a somascrollTop()
einnerHeight()
sempre será pelo menos uma fração menor quescrollHeight
. Acabei adicionando uma zona de buffer de 20px. A condicional resultante foiif(el.scrollTop() + el.innerHeight() >= el[0].scrollHeight - 20)
ondeel
é igual$(this)
.Encontrei uma solução que, quando você rola a janela e o final de uma div mostrada na parte inferior, emite um alerta.
Neste exemplo, se você rolar para baixo quando div (
.posts
) terminar, fornecerá um alerta.fonte
var running = false
declarada antes disso. Dentro do condicional, verifico.if(!running) { running = true; // and continue logic }
Dessa forma, é chamado apenas uma vez! Quando da conclusão do AJAX, setrunning = false;
Embora a pergunta tenha sido feita há 5,5 anos, ainda é mais do que relevante no contexto atual de UI / UX. E eu gostaria de adicionar meus dois centavos.
Fonte: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Determine_if_an_element_has_been_totally_scrolled
Alguns elementos não permitem rolar a altura total do elemento. Nesses casos, você pode usar:
fonte
Apenas uma observação adicional aqui, pois achei isso ao procurar uma solução para uma div fixa que eu quero rolar. Para o meu cenário, descobri que é preferível levar em consideração o preenchimento na div para que eu possa chegar exatamente ao final. Então, expandindo a resposta do Dr.Molle, adiciono o seguinte
Isso fornecerá a localização precisa, incluindo preenchimento e bordas
fonte
isso funcionou para mim embora
fonte
Se você precisar usar isso em uma div que esteja excedente-y como oculta ou rolagem, algo como isto pode ser o que você precisa.
Eu descobri que o teto era necessário porque o prop scrollHeight parece arredondar, ou talvez algum outro motivo para desativá-lo em menos de 1.
fonte
Se você não estiver usando a função Math.round (), a solução sugerida pelo Dr.Molle não funcionará em alguns casos quando uma janela do navegador tiver um zoom.
Por exemplo $ (this) .scrollTop () + $ (this) .innerHeight () = 600
$ (this) [0] .scrollHeight yield = 599.99998
600> = 599.99998 falha.
Aqui está o código correto:
Você também pode adicionar alguns pixels extras de margem se não precisar de uma condição estrita
fonte
No uso simples do DOM, você pode verificar a condição
se for verdade, você chegou ao fim.
fonte
Se alguém obtiver o
scrollHeight
asundefined
, selecione o primeiro subelemento dos elementos:mob_top_menu[0].scrollHeight
fonte
não tenho certeza se é alguma ajuda, mas é assim que eu faço.
Eu tenho um painel de índice maior que a janela e deixo rolar até o final desse índice. Então eu coloco na posição correta. O processo é revertido quando você rolar para o topo da página.
Saudações.
fonte
Embora isso tenha sido perguntado há quase 6 anos, tópico ainda quente no design de UX, aqui está um trecho de demonstração, se algum novato quiser usar
fonte
Pessoal, essa é a solução para o problema do zoom, ele funciona com todos os níveis de zoom, caso você precise:
fonte
Este é o código no github.
fonte
Aqui está outra versão.
O código da tecla é a função scroller (), que recebe a entrada como a altura da div que contém a seção de rolagem, usando overflow: scroll. Ele se aproxima de 5px a partir do topo ou 10px a partir do fundo, como na parte superior ou inferior. Caso contrário, é muito sensível. Parece que 10px é o mínimo. Você verá que ele adiciona 10 à altura da div para obter a altura inferior. Presumo que 5px possa funcionar, não testei extensivamente. YMMV. scrollHeight retorna a altura da área de rolagem interna, não a altura exibida da div, que neste caso é 400px.
fonte