SW Core
SW Core / Animações / Lottie

Lottie Animações

Toca animações vetoriais feitas no After Effects ou baixadas do LottieFiles — ícone animado, "carregando", check de sucesso. sw-ani="lottie".

O que é

Lottie é um formato de animação em arquivo .json: leve, nítido em qualquer tamanho e muito usado para ícones animados, telas de "carregando" e confirmações. O SW Core controla o player para você: tocar sozinho, repetir, tocar ao passar o mouse, a cada clique ou avançar junto com a rolagem — tudo por atributo.

A biblioteca que desenha o Lottie (lottie-web) não vem no SW Core (é pesada e nem todo site usa): você coloca uma linha a mais na página. Se ela chegar depois, o SW Core espera até 8 segundos quando a animação se aproxima da tela e monta sozinho. O arquivo vai em sw-ani-src. Sem nenhum gatilho, a animação fica parada no primeiro quadro.

Quando usar

  • "Carregando…" enquanto um formulário envia: sw-ani-autoplay sw-ani-loop.
  • Confirmação (pedido feito, mensagem enviada): toca uma vez com sw-ani-autoplay.
  • Ícone de menu, curtir, favoritar: sw-ani-hover ou sw-ani-click.
  • Ilustração que conta uma história na rolagem: sw-ani-mode="scroll".
  • Se a animação precisa reagir sozinha a vários estados (parado → hover → clicado), veja o Rive.

Comece aqui

  1. 1

    Coloque o SW Core, o pacote de animação e a biblioteca lottie-web. 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> -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.12.2/lottie.min.js"></script>
    <script src="swcore/swcore.motion.min.js"></script>
    <script src="swcore/swcore.min.js"></script>
  2. 2

    Coloque uma caixa com sw-ani="lottie", o arquivo em sw-ani-src e o gatilho. Dê tamanho à caixa — a animação ocupa o espaço que ela tiver.

    <div sw-ani="lottie" sw-ani-src="/animacoes/carregando.json"
         sw-ani-autoplay sw-ani-loop class="w-fl ar-2-1"></div>

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. Gatilhos — quando ela toca

Nos quadros a animação vem embutida no atributo data-sw-json (para esta página não depender de arquivo). No seu site use sw-ani-src="/arquivo.json" — os gatilhos são os mesmos.

sw-ani-autoplay sw-ani-loop — sozinha, sem parar <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-autoplay sw-ani-loop></div>
sw-ani-autoplay — uma vez e para <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-autoplay></div>
sw-ani-hover — passe o mouse (volta ao sair) <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-hover></div>
sw-ani-hover sw-ani-loop — repete enquanto o mouse está em cima <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-hover sw-ani-loop></div>
sw-ani-click — clique para tocar de novo <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-click></div>
sw-ani-mode="scroll" — role a página <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-mode="scroll"></div>
Sem gatilho — parada no primeiro quadro <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }'></div>

2. Velocidade (sw-ani-speed)

1 é a velocidade original. 0.5 = metade, 2 = o dobro.

sw-ani-speed="0.5" <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-autoplay sw-ani-loop sw-ani-speed="0.5"></div>
Padrão (1) <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-autoplay sw-ani-loop></div>
sw-ani-speed="2" <div sw-ani="lottie" data-sw-json='{"v":"5.7.4", … }' sw-ani-autoplay sw-ani-loop sw-ani-speed="2"></div>

Tabela de opções

PalavraO que fazExemplo
Ligar e arquivo
sw-ani="lottie"Liga o player Lottie nesta caixa.<div sw-ani="lottie" …></div>
sw-ani-srcEndereço do arquivo .json do Lottie.sw-ani-src="/animacoes/check.json"
data-sw-jsonAlternativa: a animação inteira escrita dentro do atributo (entre aspas simples). Funciona como data-sw-json ou sw-ani-json.data-sw-json='{"v":"5.7.4",…}'
Gatilho
sw-ani-autoplayToca sozinha quando carrega.sw-ani-autoplay
sw-ani-loopRepete sem parar (com autoplay) ou enquanto o mouse está em cima (com hover).sw-ani-loop
sw-ani-hoverToca quando o mouse entra; ao sair, volta de trás para frente (ou pausa, se tiver loop).sw-ani-hover
sw-ani-clickToca do começo a cada clique.sw-ani-click
sw-ani-mode="scroll"Os quadros avançam com a rolagem, do topo da caixa a 80% da tela até o fim dela a 20%.sw-ani-mode="scroll"
sw-ani-start / sw-ani-endSó no modo scroll: onde começa e termina. Padrão: top 80% e bottom 20%.sw-ani-start="top 60%"
Ritmo
sw-ani-speedVelocidade. Padrão: 1.sw-ani-speed="1.5"
Avançado
data-sw-forceToca mesmo para quem ativou "reduzir movimento" (por padrão essa pessoa vê só o último quadro, parado).data-sw-force

Receitas prontas — usos reais

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

"Enviando…" no formulário de contato Referência
<form id="contato">
  …campos…
  <button type="submit" sw-btn="pri">Enviar</button>
  <div id="enviando" sw-ani="lottie" sw-ani-src="/animacoes/carregando.json"
       sw-ani-autoplay sw-ani-loop class="hid"></div>
</form>

<script>
  document.getElementById('contato').addEventListener('submit', () => {
    document.getElementById('enviando').classList.remove('hid'); // mostra o "carregando"
  });
</script>
Check de "pedido confirmado" que toca uma vez Referência
<div class="t-ct">
  <div sw-ani="lottie" sw-ani-src="/animacoes/check.json" sw-ani-autoplay class="w-fl ar-2-1"></div>
  <h2>Pedido confirmado!</h2>
</div>
Coração de "curtir" que anima no clique Referência
<button type="button" sw-btn="ghost rnd" aria-label="Curtir">
  <span sw-ani="lottie" sw-ani-src="/animacoes/coracao.json" sw-ani-click class="blk w-fl h-fl"></span>
</button>
Controlar pelo JavaScript (pausar, tocar, ir para um quadro) Referência
<div id="mascote" sw-ani="lottie" sw-ani-src="/animacoes/mascote.json"></div>

<script>
  // depois que a página carregou, o player fica em elemento._swLottie
  const player = document.getElementById('mascote')._swLottie;
  player.play();            // tocar
  player.pause();           // pausar
  player.goToAndStop(30, true); // parar no quadro 30
</script>

API (JavaScript)

elemento._swLottie
O player da lottie-web daquela caixa, já montado. Use os comandos dela: play(), pause(), stop(), goToAndStop(quadro, true), setSpeed(n).
SWMotion.lottie(elemento)
Monta o player numa caixa que entrou na página depois do carregamento. A caixa precisa ter data-sw-src (ou data-sw-json) e os gatilhos em data-sw-…; devolve o player.
SWMotion.refresh()
Reinicia todas as animações da página e enxerga os sw-ani="lottie" novos.

Precisa de quê

  • swcore.motion.min.js e swcore.motion.min.css, antes do swcore.min.js.
  • A biblioteca lottie-web (de terceiros, não vem no SW Core): <script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.12.2/lottie.min.js">.
  • Um arquivo .json de animação Lottie (exportado do After Effects com Bodymovin ou baixado do LottieFiles).

Cuidados — erros comuns

  • Sem a lottie-web na página nada aparece (o console avisa "Lottie player (window.lottie) não encontrado").
  • Caixa sem tamanho = animação invisível. Dê largura e altura (w-fl ar-2-1, ou no CSS da página).
  • Sem nenhum gatilho (sw-ani-autoplay, -hover, -click ou sw-ani-mode="scroll") ela fica parada no primeiro quadro.
  • Arquivos .lottie (o formato compactado novo do LottieFiles) não são lidos: baixe a versão .json.
  • O arquivo .json tem que estar no mesmo site (ou num servidor que libere acesso de outros sites), senão o navegador bloqueia o carregamento.

O que ele não faz

  • Não vem com animações prontas: o arquivo é seu (ou baixado de um banco como o LottieFiles).
  • Quem ativou "reduzir movimento" no sistema vê só o último quadro, parado.