SWCore / Componentes / Infinite Scroll

Infinite Scroll Componentes

Carrega mais itens automaticamente conforme o usuário se aproxima do fim da página.

O que é

Scroll infinito clássico — em vez de um botão "carregar mais", o próximo lote de itens chega sozinho.

Como funciona

Escuta o scroll da janela e calcula a distância até o fim do documento; quando fica menor que o limiar configurado, dispara a busca da próxima página automaticamente.

Exemplos

1. Demo isolada — role dentro da caixa (sem precisar rolar a página inteira) Ao vivo

Post #1 — Introdução ao SWCore

Componentes prontos, sem dependência externa.

Post #2 — Animação

Reveal, parallax, pin e mais, com Tailwind.

Post #3 — Ícones

Mais de 1000 glifos embutidos, zero peso extra.

Role para carregar mais…

Esta caixinha usa um IntersectionObserver isolado e dados falsos só pra ilustrar visualmente — o componente real ([sw-infinite], exemplo 2 abaixo) monitora o scroll da janela inteira, não de um container.

<!-- Só ilustrativo — esta caixa NÃO usa [sw-infinite] de verdade, é uma simulação isolada
     (IntersectionObserver escopado a este container) pra caber numa demo pequena.
     Pra sintaxe real do componente, veja o Exemplo 2 abaixo. -->
<div id="lista">
  <!-- itens carregados aparecem aqui -->
</div>
<div id="sentinela">Role para carregar mais…</div>
2. Componente real — role até o fim desta página Ao vivo
<!-- URL real e testável — os mesmos arquivos usados na demo acima (docs/assets/demo-infinite-page1.html,
     -page2.html, -page3.html vazio pra marcar o fim). Copie esta página e teste sem precisar de backend
     nenhum; na sua aplicação real, troque só a URL por um endpoint seu que devolva HTML da mesma forma. -->
<div id="lista"><!-- itens aqui --></div>
<div sw-infinite
     sw-infinite-url="assets/demo-infinite-page{page}.html"
     sw-infinite-target="#lista"
     sw-infinite-offset="300">
</div>
3. Como funciona Ao vivo
1Usuário rola a página
2O componente calcula a distância até o fim — se menor que o offset, dispara
3Fetch na URL, com {page} substituído pelo número atual
4HTML da resposta é inserido no target
5Se a resposta vier vazia, dispara sw:infinite:end — fim da lista
4. Escutando os eventos via JavaScript Ao vivo
const el = document.querySelector('[sw-infinite]');

el.addEventListener('sw:infinite:load', (e) => {
  console.log('Página carregada:', e.detail.page);
  console.log('Itens adicionados:', e.detail.items.length);
});

el.addEventListener('sw:infinite:end', () => {
  console.log('Não há mais itens');
});

el.addEventListener('sw:infinite:error', (e) => {
  console.warn('Erro na página:', e.detail.page);
});

Atributos

sw-infinite-url
URL com {page} no lugar do número da página, ex.: "/api/posts?page={page}"
sw-infinite-target
seletor de onde anexar os itens novos
sw-infinite-offset
pixels antes do fim da página pra disparar o carregamento (padrão 300)
sw-infinite-start
página inicial (padrão 1)

Variantes

Nenhum.

Eventos

sw:infinite:load
{ page, items }
sw:infinite:end
quando a resposta vem vazia
sw:infinite:error
{ page }

API (JavaScript)

Nenhum.

Requisitos

  • O endpoint precisa devolver HTML dos itens (não JSON) — cada filho direto da resposta vira um item na lista. Uma resposta sem filhos (0 itens) marca o fim e para de tentar carregar mais.

Limitações — o que ele não faz

Nenhuma.