SW Core
SW Core / Animações / Counter

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. 1

    Coloque o SW Core e o pacote de animação (o swcore.motion.min.js vem antes do swcore.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. 2

    Coloque sw-ani="counter" e o valor final em sw-ani-to.

    0
    <span sw-ani="counter" sw-ani-to="15420">0</span>
  3. 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.

0
Só o número <span sw-ani="counter" sw-ani-to="1200">0</span>
0
sw-ani-prefix="+" <span sw-ani="counter" sw-ani-to="1200" sw-ani-prefix="+">0</span>
0
sw-ani-prefix="R$ " <span sw-ani="counter" sw-ani-to="248900" sw-ani-prefix="R$ ">0</span>
0
sw-ani-suffix="%" <span sw-ani="counter" sw-ani-to="87" sw-ani-suffix="%">0</span>
0
Os dois juntos <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.

0
Padrão — 1.234.567 <span sw-ani="counter" sw-ani-to="1234567">0</span>
0
sw-ani-decimals="1" — 98,5 <span sw-ani="counter" sw-ani-to="98.5" sw-ani-decimals="1" sw-ani-suffix="%">0</span>
0
sw-ani-decimals="2" — dinheiro <span sw-ani="counter" sw-ani-to="1999.9" sw-ani-decimals="2" sw-ani-prefix="R$ ">0</span>
0
sw-ani-sep="" — ano, sem ponto <span sw-ani="counter" sw-ani-to="2026" sw-ani-sep="">0</span>
0
sw-ani-sep=" " — milhar com espaço <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.

1.000
sw-ani-from="1000" — de 1.000 a 1.500 <span sw-ani="counter" sw-ani-from="1000" sw-ani-to="1500">1.000</span>
0
sw-ani-duration="0.6" — rápido <span sw-ani="counter" sw-ani-to="500" sw-ani-duration="0.6">0</span>
0
sw-ani-duration="6" — lento <span sw-ani="counter" sw-ani-to="500" sw-ani-duration="6">0</span>
100
Contando para baixo — de 100 a 0 <span sw-ani="counter" sw-ani-from="100" sw-ani-to="0" sw-ani-suffix=" vagas">100</span>

Tabela de opções

PalavraO que fazExemplo
Ligar e valor
sw-ani="counter"Liga o contador.<span sw-ani="counter" …>0</span>
sw-ani-toValor 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-fromValor inicial. Padrão: 0.sw-ani-from="1000"
Formato
sw-ani-prefixTexto antes do número.sw-ani-prefix="R$ "
sw-ani-suffixTexto depois do número.sw-ani-suffix="%"
sw-ani-decimalsCasas decimais, de 0 a 6 (saem com vírgula). Padrão: 0.sw-ani-decimals="2"
sw-ani-sepSeparador de milhar. Padrão: . (ponto). Vazio = sem separador.sw-ani-sep=""
Tempo e gatilho
sw-ani-durationDuração em segundos, de 0.1 a 30. Padrão: 2.sw-ani-duration="3"
sw-ani-startQuando 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-forceConta 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.

Seção "nossos números" Ao vivo
15.420
clientes atendidos
12
anos de mercado
98,5%
de satisfação
<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>
Cartão de faturamento no painel Ao vivo
Faturamento do mês
R$ 48.750,90
<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>
Últimas vagas contando para baixo Ao vivo
Turma de outubro
restam 7 vagas
<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)
Liga o contador num elemento que entrou na página depois do carregamento. O elemento precisa ter data-sw="counter" e as opções em data-sw-… (ex.: data-sw-to).
SWMotion.refresh()
Reinicia todas as animações da página e enxerga os sw-ani="counter" novos.

Precisa de quê

  • swcore.motion.min.js (já traz o GSAP) e swcore.motion.min.css, antes do swcore.min.js.

Cuidados — erros comuns

  • Escreva o valor final formatado dentro do elemento (15.420) e o valor cru no sw-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 — e 15.420 vira 15,42 (o ponto é lido como decimal). Sempre informe sw-ani-to.
  • No sw-ani-to o 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.