Paginação Componentes
Os números de página (‹ 1 … 4 5 6 … 24 ›) calculados sozinhos: você diz quantos itens tem e quantos cabem por página. <nav sw-pagination sw-pagination-total='240'>.
O que é
Quando uma lista é grande demais para uma tela só — produtos da loja, posts do blog, pedidos no painel — ela é dividida em páginas, e embaixo aparecem os números para trocar de página. Com o SWCore você não monta os números à mão: informa o total de itens (sw-pagination-total), quantos mostram por página (sw-pagination-per) e em qual página está (sw-pagination-cur). Ele calcula quantas páginas existem, mostra as vizinhas da atual, resume o resto com "…" e coloca setas de anterior/próxima.
O JavaScript do núcleo desenha os números dentro da <nav>. A página atual ganha um fundo na cor primária que desliza até o número clicado. Ao clicar, ele atualiza sw-pagination-cur e dispara o evento sw:pagination:change com o número da nova página — é o seu código que carrega os itens daquela página (por AJAX ou trocando o endereço). As setas ficam apagadas na primeira e na última página. Funciona com teclado (Tab + Enter) e nos dois temas.
Quando usar
- Loja virtual: grade de produtos com 12 ou 24 por página.
- Blog / notícias: lista de posts.
- Painel admin: tabelas de pedidos, clientes, agendamentos carregadas por AJAX.
- Se a lista for pequena (cabe numa tela), não precisa. Se quiser "carregar mais ao rolar", veja o Infinite Scroll.
Comece aqui
-
1
Coloque o SWCore na página: CSS no
<head>e JS no fim do<body>. A paginação precisa dos dois.<link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css"> <!-- fim do <body> --> <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script> -
2
Escreva a
<nav>vazia com o total, quantos por página e a página atual. 240 itens ÷ 10 por página = 24 páginas. Clique nos números.<nav sw-pagination sw-pagination-total="240" sw-pagination-per="10" sw-pagination-cur="4"></nav> -
3
Escute a troca de página e carregue os itens dela.
const paginas = document.querySelector('[sw-pagination]'); paginas.addEventListener('sw:pagination:change', (e) => { carregarProdutos(e.detail.page); // sua função: busca a página e mostra na tela });
Todas as variações
Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.
1. Estilos
O estilo vai no valor de sw-pagination. Sem valor: fundo deslizante com canto discreto. pill = cápsula. ghost = sem fundo, a atual fica sublinhada na cor primária. Os dois combinam.
<nav sw-pagination sw-pagination-total="80" sw-pagination-per="10" sw-pagination-cur="3"></nav>
<nav sw-pagination="pill" sw-pagination-total="80" sw-pagination-per="10" sw-pagination-cur="3"></nav>
<nav sw-pagination="ghost" sw-pagination-total="80" sw-pagination-per="10" sw-pagination-cur="3"></nav>
<nav sw-pagination="pill ghost" sw-pagination-total="80" sw-pagination-per="10" sw-pagination-cur="3"></nav>
2. Tamanhos
Três tamanhos: sm (pequeno, bom para tabela de painel), o padrão e lg (grande, bom para celular e sites com letra grande). Combinam com o estilo: "sm pill", "lg ghost"…
<nav sw-pagination="sm" sw-pagination-total="80" sw-pagination-per="10" sw-pagination-cur="3"></nav>
<nav sw-pagination sw-pagination-total="80" sw-pagination-per="10" sw-pagination-cur="3"></nav>
<nav sw-pagination="lg" sw-pagination-total="80" sw-pagination-per="10" sw-pagination-cur="3"></nav>
<nav sw-pagination="sm pill" sw-pagination-total="80" sw-pagination-per="10" sw-pagination-cur="3"></nav>
3. Quantos números aparecem
sw-pagination-delta é quantos vizinhos da página atual aparecem de cada lado (padrão 2). A primeira e a última sempre aparecem; o que sobra vira "…". sw-pagination-ends acrescenta os botões « e » (ir para a primeira / última).
<nav sw-pagination sw-pagination-total="500" sw-pagination-per="10" sw-pagination-cur="25" sw-pagination-delta="1"></nav>
<nav sw-pagination sw-pagination-total="500" sw-pagination-per="10" sw-pagination-cur="25"></nav>
<nav sw-pagination sw-pagination-total="500" sw-pagination-per="10" sw-pagination-cur="25" sw-pagination-delta="3"></nav>
<nav sw-pagination sw-pagination-total="500" sw-pagination-per="10" sw-pagination-cur="25" sw-pagination-ends></nav>
4. Casos das pontas
Na primeira página a seta ‹ fica apagada; na última, a ›. Com poucas páginas, todos os números aparecem, sem "…".
<nav sw-pagination sw-pagination-total="120" sw-pagination-per="12" sw-pagination-cur="1" sw-pagination-ends></nav>
<nav sw-pagination sw-pagination-total="120" sw-pagination-per="12" sw-pagination-cur="10" sw-pagination-ends></nav>
<nav sw-pagination sw-pagination-total="50" sw-pagination-per="10" sw-pagination-cur="2"></nav>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Números (obrigatórios) | ||
sw-pagination-total | Quantos itens existem ao todo. Padrão 1. | sw-pagination-total="240" |
sw-pagination-per | Quantos itens por página. Padrão 10. Páginas = total ÷ por página, arredondado para cima. | sw-pagination-per="12" |
sw-pagination-cur | Página em que a pessoa está. Padrão 1. O JS atualiza a cada clique. | sw-pagination-cur="4" |
| Quantos números mostrar | ||
sw-pagination-delta | Vizinhos de cada lado da página atual. Padrão 2. | sw-pagination-delta="1" |
sw-pagination-ends | Sem valor: mostra « (primeira) e » (última). | <nav sw-pagination sw-pagination-ends> |
| Estilo (valor de sw-pagination) | ||
(nenhum) | Fundo na cor primária que desliza até a página atual. | sw-pagination |
pill | Cápsula (bem redondo). | sw-pagination="pill" |
ghost | Sem fundo: a atual fica na cor primária, sublinhada. | sw-pagination="ghost" |
| Tamanho (valor de sw-pagination) | ||
sm | Pequeno (28 px). | sw-pagination="sm" |
(nenhum) | Médio (34 px). | |
lg | Grande (44 px). | sw-pagination="lg" |
| Classes que o JS escreve (para o seu CSS) | ||
sw-pagination-it | Cada número/seta. | |
is-act | A página atual. | |
is-arr | As setas ‹ › « ». | |
is-dis | Seta apagada (não há para onde ir). | |
is-sep | As reticências "…". | |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
Mostrando produtos 1 a 12 de 96
<div id="produtos">…</div>
<p id="info">Mostrando produtos 1 a 12 de 96</p>
<nav sw-pagination="pill" id="paginas" sw-pagination-total="96" sw-pagination-per="12" sw-pagination-cur="1"></nav>
<script>
document.getElementById('paginas').addEventListener('sw:pagination:change', async (e) => {
const pagina = e.detail.page;
const resp = await fetch('/produtos?pagina=' + pagina);
document.getElementById('produtos').innerHTML = await resp.text();
const de = (pagina - 1) * 12 + 1, ate = Math.min(pagina * 12, 96);
document.getElementById('info').textContent = 'Mostrando produtos ' + de + ' a ' + ate + ' de 96';
});
</script>
<div class="flx j-sb alc">
<span>1.284 pedidos</span>
<nav sw-pagination="sm" sw-pagination-total="1284" sw-pagination-per="20"
sw-pagination-cur="1" sw-pagination-delta="1" sw-pagination-ends></nav>
</div>
<!-- no PHP, escreva a página atual que veio na URL (?pagina=3) -->
<nav sw-pagination sw-pagination-total="<?= $totalPosts ?>" sw-pagination-per="9"
sw-pagination-cur="<?= $paginaAtual ?>"></nav>
<script>
document.querySelector('[sw-pagination]').addEventListener('sw:pagination:change', (e) => {
location.href = '/blog?pagina=' + e.detail.page;
});
</script>
SW.Pagination.goto('#paginas', 5); // vai para a página 5 (dispara sw:pagination:change)
// o mesmo, pelo elemento:
document.getElementById('paginas')._swPagination.goto(5);
Eventos
sw:pagination:change<nav> quando a página muda (clique, Enter ou goto). e.detail.page = número da nova página. Não dispara ao clicar na página que já está aberta.API (JavaScript)
SW.Pagination.goto(nav, n)n. nav é a <nav sw-pagination> ou o seletor dela ('#paginas'). Atalho para o de baixo.nav._swPagination.goto(n)n como se a pessoa tivesse clicado (move o destaque e dispara o evento). nav é a sua <nav sw-pagination>.SW.Pagination.initAll(raiz)[sw-pagination] dentro de raiz que ainda não foram montadas. O núcleo já faz sozinho.Precisa de quê
swcore.min.css+swcore.min.js— sem o JS a<nav>fica vazia.- Um jeito de buscar os itens de cada página (seu servidor/AJAX).
Cuidados — erros comuns
- Esperar que a lista troque sozinha: a paginação só mostra os números e avisa a troca (
sw:pagination:change). Buscar os itens daquela página é com você. - Colocar os números à mão dentro da
<nav>: não precisa — e o que estiver lá continua aparecendo junto. Deixe-a vazia. - Mudar
sw-pagination-totaldepois (ex.: filtro que reduz a lista) e esperar que ela recalcule: o total é lido só uma vez. Troque a<nav>inteira por uma nova com o total certo. - Esquecer
sw-pagination-per: ele assume 10 por página e a conta fica errada se sua lista mostra 12.
O que ele não faz
- Os números não são links de verdade (
<a href>): o Google não segue essa paginação. Para SEO de blog/loja, mantenha também links normais "Próxima página" gerados no servidor. - A cor do destaque é sempre a primária; não há opção de outra cor.
- Não mostra "ir para a página ___" nem "itens por página".

