Counter Animações
O número sobe do zero até o valor quando aparece na tela — o clássico "+15.000 clientes". sw-ani="counter".
O que é
Faz um número contar para cima (de 0, ou de onde você quiser, até o valor final) na primeira vez que ele aparece na tela. Já sai formatado do jeito brasileiro — milhar com ponto, decimal com vírgula — e aceita texto antes e depois ("R$ ", "+", "%", " clientes").
O valor final vai em sw-ani-to. Quando o número chega a 85% da altura da tela, ele conta durante 2 segundos (mude com sw-ani-duration) e para no valor final. Acontece uma vez só: rolar de novo não repete.
Quando usar
- Seção de números / resultados: clientes atendidos, anos de mercado, projetos entregues.
- Prova social em página de vendas: "+1.200 alunos", "98,5% de aprovação".
- Painel ou relatório com destaque de um valor (faturamento, metas).
- Para contagem regressiva até uma data, use o Countdown.
Comece aqui
-
1
Coloque o SW Core e o pacote de animação (o
swcore.motion.min.jsvem antes doswcore.min.js).<!-- no <head> --> <link rel="stylesheet" href="swcore/swcore.min.css"> <link rel="stylesheet" href="swcore/swcore.motion.min.css"> <!-- no fim do <body>: o motion ANTES do swcore --> <script src="swcore/swcore.motion.min.js"></script> <script src="swcore/swcore.min.js"></script> -
2
Coloque
sw-ani="counter"e o valor final emsw-ani-to.0<span sw-ani="counter" sw-ani-to="15420">0</span> -
3
Acrescente o que vem antes ou depois do número.
0<span sw-ani="counter" sw-ani-to="15420" sw-ani-prefix="+" sw-ani-suffix=" clientes">0</span>
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. Texto antes e depois (sw-ani-prefix, sw-ani-suffix)
Role até aqui para ver contar. O espaço dentro do valor conta: "R$ " deixa um espaço antes do número.
<span sw-ani="counter" sw-ani-to="1200">0</span>
<span sw-ani="counter" sw-ani-to="1200" sw-ani-prefix="+">0</span>
<span sw-ani="counter" sw-ani-to="248900" sw-ani-prefix="R$ ">0</span>
<span sw-ani="counter" sw-ani-to="87" sw-ani-suffix="%">0</span>
<span sw-ani="counter" sw-ani-to="350" sw-ani-prefix="+" sw-ani-suffix=" projetos">0</span>
2. Casas decimais e separador de milhar
Decimal sai com vírgula (sw-ani-decimals, padrão 0). O milhar sai com ponto (sw-ani-sep, padrão .); com sw-ani-sep="" não tem separador — bom para ano e código.
<span sw-ani="counter" sw-ani-to="1234567">0</span>
<span sw-ani="counter" sw-ani-to="98.5" sw-ani-decimals="1" sw-ani-suffix="%">0</span>
<span sw-ani="counter" sw-ani-to="1999.9" sw-ani-decimals="2" sw-ani-prefix="R$ ">0</span>
<span sw-ani="counter" sw-ani-to="2026" sw-ani-sep="">0</span>
<span sw-ani="counter" sw-ani-to="1234567" sw-ani-sep=" ">0</span>
3. De onde começa e quanto demora
sw-ani-from é o número de partida (padrão 0). sw-ani-duration é o tempo em segundos (padrão 2). Pode até contar para baixo: basta o from ser maior que o to.
<span sw-ani="counter" sw-ani-from="1000" sw-ani-to="1500">1.000</span>
<span sw-ani="counter" sw-ani-to="500" sw-ani-duration="0.6">0</span>
<span sw-ani="counter" sw-ani-to="500" sw-ani-duration="6">0</span>
<span sw-ani="counter" sw-ani-from="100" sw-ani-to="0" sw-ani-suffix=" vagas">100</span>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Ligar e valor | ||
sw-ani="counter" | Liga o contador. | <span sw-ani="counter" …>0</span> |
sw-ani-to | Valor final. Use ponto para decimal (98.5), sem separador de milhar. Se faltar, ele tenta ler o número escrito dentro do elemento. | sw-ani-to="15420" |
sw-ani-from | Valor inicial. Padrão: 0. | sw-ani-from="1000" |
| Formato | ||
sw-ani-prefix | Texto antes do número. | sw-ani-prefix="R$ " |
sw-ani-suffix | Texto depois do número. | sw-ani-suffix="%" |
sw-ani-decimals | Casas decimais, de 0 a 6 (saem com vírgula). Padrão: 0. | sw-ani-decimals="2" |
sw-ani-sep | Separador de milhar. Padrão: . (ponto). Vazio = sem separador. | sw-ani-sep="" |
| Tempo e gatilho | ||
sw-ani-duration | Duração em segundos, de 0.1 a 30. Padrão: 2. | sw-ani-duration="3" |
sw-ani-start | Quando começa. Padrão: top 85% (o topo do número a 85% da altura da tela). | sw-ani-start="top 60%" |
| Avançado | ||
data-sw-force | Conta mesmo para quem ativou "reduzir movimento" (por padrão essa pessoa vê o valor final direto). | data-sw-force |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<div class="l l-3 gap-4 t-ct">
<div>
<span sw-ani="counter" sw-ani-to="15420" sw-ani-prefix="+" class="t-xg fw7 t-pri">15.420</span>
<div class="t-mut">clientes atendidos</div>
</div>
<div>
<span sw-ani="counter" sw-ani-to="12" class="t-xg fw7 t-pri">12</span>
<div class="t-mut">anos de mercado</div>
</div>
<div>
<span sw-ani="counter" sw-ani-to="98.5" sw-ani-decimals="1" sw-ani-suffix="%" class="t-xg fw7 t-pri">98,5%</span>
<div class="t-mut">de satisfação</div>
</div>
</div>
<div class="bg-sur bd r-m p-4">
<div class="t-mut"><i class="swi-trending-up"></i> Faturamento do mês</div>
<span sw-ani="counter" sw-ani-to="48750.9" sw-ani-decimals="2" sw-ani-prefix="R$ "
sw-ani-duration="1.2" class="t-xg fw7">R$ 48.750,90</span>
</div>
<div class="bg-g-err r-m p-4 t-ct">
<strong>Turma de outubro</strong>
<div>restam <span sw-ani="counter" sw-ani-from="40" sw-ani-to="7" sw-ani-duration="2.5">7</span> vagas</div>
</div>
API (JavaScript)
SWMotion.counter(elemento)data-sw="counter" e as opções em data-sw-… (ex.: data-sw-to).SWMotion.refresh()sw-ani="counter" novos.Precisa de quê
swcore.motion.min.js(já traz o GSAP) eswcore.motion.min.css, antes doswcore.min.js.
Cuidados — erros comuns
- Escreva o valor final formatado dentro do elemento (
15.420) e o valor cru nosw-ani-to(15420). O texto de dentro é o que aparece para buscadores e para quem está sem JavaScript. - Sem
sw-ani-to, ele lê o número de dentro — e15.420vira 15,42 (o ponto é lido como decimal). Sempre informesw-ani-to. - No
sw-ani-too decimal é com ponto (98.5). Com vírgula (98,5) ele entende 98. - Se usar
sw-ani-sep=",", o decimal também sai com vírgula e os dois se confundem. Prefira ponto ou espaço como separador.
O que ele não faz
- Conta uma vez só por carregamento de página.
- Não há opção de "curva" do movimento: ele começa rápido e desacelera no fim.
- Quem ativou "reduzir movimento" no sistema vê o valor final direto, sem contar.

