SW Core
SW Core / Animações / Countdown

Countdown Animações

Contagem regressiva até uma data — "faltam 12d 04h 33m 10s" — atualizando a cada segundo. sw-ani="countdown".

O que é

Mostra quanto tempo falta até uma data e hora: o lançamento, o fim da promoção, o dia do evento. Atualiza sozinho a cada segundo. Você escolhe quais partes aparecem (dias, horas, minutos, segundos), o que vai entre elas e o nome de cada uma. Quando chega a zero, pode trocar por uma frase ("A promoção encerrou!").

Você informa a data-alvo em sw-ani-target, no formato AAAA-MM-DDThh:mm:ss. O texto que você escrever dentro do elemento aparece só até o SW Core assumir (e fica para quem não tem JavaScript). O resultado padrão é assim: 98d:04h:05m:06s — cada número com a sua letra, separados por dois-pontos. Os dias só aparecem enquanto faltar pelo menos 1 dia.

Quando usar

  • Promoção com prazo (Black Friday, cupom que expira): cria urgência.
  • Lançamento de produto, curso ou site: "abre em…".
  • Evento (casamento, show, formatura): "faltam X dias".
  • Para número que sobe até um valor ("+15.000 clientes"), o componente é o Counter.

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="countdown" e a data. Ele já começa a contar.

    contando…
    <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00">contando…</span>
  3. 3

    Mais legível: espaço entre as partes e nomes por extenso.

    contando…
    <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00"
          sw-ani-separator=" · " sw-ani-labels=" dias, h, min, s">contando…</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. Quais partes aparecem (sw-ani-format)

Letras juntas: d dias, h horas, m minutos, s segundos. Padrão dhms. A parte que você tira soma na próxima que aparece: com 2 dias faltando, hms mostra 48h e pouco; ms mostra o total em minutos.

contando…
dhms — completo (padrão) <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00">contando…</span>
contando…
dhm — sem os segundos <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00" sw-ani-format="dhm">contando…</span>
contando…
d — só os dias <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00" sw-ani-format="d">contando…</span>
contando…
hms — horas (somando os dias), min, seg <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00" sw-ani-format="hms">contando…</span>
contando…
ms — minutos (somando tudo) e seg <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00" sw-ani-format="ms">contando…</span>

2. Separador e nomes (sw-ani-separator, sw-ani-labels)

O separador é o que vai entre as partes (padrão :). Os nomes são 4, separados por vírgula, na ordem dias, horas, minutos, segundos (padrão d,h,m,s). O espaço conta: " dias" sai "98 dias". Nome vazio tira o nome daquela parte: ",,," mostra só os números.

contando…
Padrão — d,h,m,s com ":" <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00">contando…</span>
contando…
Separador de espaço <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00" sw-ani-separator=" ">contando…</span>
contando…
Nomes por extenso <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00" sw-ani-separator=" · " sw-ani-labels=" dias, horas, min, seg">contando…</span>
contando…
Em inglês <span sw-ani="countdown" sw-ani-target="2027-01-01T00:00:00" sw-ani-separator=" " sw-ani-labels="d,h,m,s">contando…</span>

3. Quando chega a zero (sw-ani-complete)

Estes quadros usam uma data que já passou (2020), para você ver como fica no fim. Com sw-ani-complete a contagem vira a sua frase. O elemento também ganha o atributo data-sw-done, que você pode usar no CSS.

contando…
Sem frase — fica em zero <span sw-ani="countdown" sw-ani-target="2020-01-01T00:00:00">contando…</span>
contando…
sw-ani-complete — troca pela frase <span sw-ani="countdown" sw-ani-target="2020-01-01T00:00:00" sw-ani-complete="A promoção encerrou!">contando…</span>

Tabela de opções

PalavraO que fazExemplo
Ligar e data
sw-ani="countdown"Liga a contagem regressiva.<span sw-ani="countdown" …>
sw-ani-targetData e hora-alvo, formato AAAA-MM-DDThh:mm:ss. Obrigatório. Aceita fuso no fim (ex.: -03:00).sw-ani-target="2026-11-27T23:59:59-03:00"
Formato
sw-ani-formatQuais partes: letras d h m s juntas. Padrão: dhms.sw-ani-format="dhm"
sw-ani-separatorO que vai entre as partes. Padrão: :.sw-ani-separator=" "
sw-ani-labelsOs 4 nomes (dias, horas, minutos, segundos), separados por vírgula. Padrão: d,h,m,s. Nome vazio = sem nome.sw-ani-labels=" dias, horas, min, seg"
sw-ani-completeFrase que substitui a contagem quando chega a zero.sw-ani-complete="Inscrições encerradas"
O que ele escreve no elemento
data-sw-doneAparece quando a contagem zera. Use no seu CSS para mudar o visual.[data-sw-done] { opacity: .6; }

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Faixa de promoção no topo do site Ao vivo
BLACK FRIDAY — 40% OFF termina em …
<div class="bg-g-err p-3 flx alc j-ct gap-3 f-wr">
  <strong>BLACK FRIDAY — 40% OFF</strong>
  <span>termina em</span>
  <span sw-ani="countdown" sw-ani-target="2026-11-27T23:59:59-03:00"
        sw-ani-separator=" " sw-ani-complete="Promoção encerrada">…</span>
</div>
Oferta que acaba 15 minutos depois de a pessoa chegar Ao vivo

Seu cupom BEMVINDO10 vale por

15m 00s
<span id="cupom" sw-ani="countdown" sw-ani-format="ms" sw-ani-separator=" "
      sw-ani-complete="Cupom expirado">15m 00s</span>

<script>
  // a data-alvo é "agora + 15 minutos" — o script vem ANTES do swcore.motion.min.js
  document.getElementById('cupom')
    .setAttribute('sw-ani-target', new Date(Date.now() + 15 * 60 * 1000).toISOString());
</script>
Contagem do evento, em blocos, e visual de "encerrado" Ao vivo

Festival de Inverno começa em

…
<style>
  .cd-evento[data-sw-done] { opacity: .55; text-decoration: line-through; }
</style>

<span sw-ani="countdown" sw-ani-target="2027-06-20T19:00:00-03:00"
      sw-ani-format="dhm" sw-ani-separator="   "
      sw-ani-labels=" dias, horas, minutos, s" class="cd-evento">…</span>

API (JavaScript)

SWMotion.refresh()
Se a contagem entrou na página depois que ela carregou (AJAX, JS), chame para ela começar. Reinicia todas as animações da página.

Precisa de quê

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

Cuidados — erros comuns

  • Data em formato brasileiro (27/11/2026) não é entendida: o console avisa "data-sw-target inválido". Use 2026-11-27T23:59:59.
  • Sem fuso no fim da data, vale o horário do computador de quem visita. Para uma promoção que acaba às 23:59 de Brasília para todo mundo, acrescente -03:00.

O que ele não faz

  • A conta usa o relógio do aparelho de quem visita. Relógio errado = contagem errada. Em promoção séria, confira o prazo também no servidor.
  • Não dispara evento JavaScript quando zera. Para reagir ao fim, use a frase (sw-ani-complete) ou o atributo data-sw-done no CSS.