SWCore / Animações / Lottie

Lottie Animações

Animações vetoriais descritas em JSON interpretadas como SVG real, leve e nítido em qualquer resolução.

O que é

O JSON é a partitura (descreve camadas, vetores, curvas de Bézier e keyframes) e o Player Lottie é o músico (interpreta as instruções e desenha cada quadro como SVG nativo no DOM). Ideal para ícones animados, micro-feedbacks de interface, ilustrações dinâmicas e loaders — infinitamente escalável e sem a perda de qualidade dos GIFs.

Como funciona

O player lê o arquivo JSON local e desenha os vetores em SVG. O SWCore permite controlar a timeline de forma declarativa ou programática: reprodução contínua, reação ao hover (avançando e retrocedendo), disparo único no clique (feedback), controle milimétrico por scroll ou scrub manual por frames.

Exemplos

00 · Modelo Mental em 4 Etapas (JSON → SVG) Ao vivo
01
JSON

A partitura: descreve camadas, formas e keyframes.

02
Keyframes

Guardam a transformação de cada vetor no tempo.

03
Player SVG

Lê as coordenadas e renderiza o frame atual como SVG nativo.

04
Controle

A página dita a velocidade, segmentos, clique ou hover.

<!-- 
  Fluxo de Execução do Lottie:
  1. JSON        -> Partitura vetorial com camadas e curvas
  2. Keyframes   -> Registram a posição e transformação no tempo
  3. Player SVG  -> Converte os dados em elementos <svg> reais
  4. Controle    -> Play, pause, hover, velocidade, segmentos
-->
01 · Laboratório Interativo: Controle Total da Timeline Vetorial Ao vivo
LOTTIE COM JSON REAL

Controle Completo da Timeline

CARREGANDO JSON…
ENTRADA · FRAMES 0–99 Pronto
METADADOS DO ARQUIVO JSON
PESO DO JSON:24.2 KB
CAMADAS:5 layers
TAXA DE QUADROS:30 FPS
DURAÇÃO TOTAL:10.0 s (300 frames)
FRAME ATUAL:0 / 300
RENDERIZADOR:SVG Nativo
Velocidade:
Tocar Segmento:
F: 0 F: 300
<!-- Player Lottie real com manipulação de timeline e telemetria -->
<div class="demo-canvas-box" style="padding:1.5rem;">
  <div id="lab-lottie-player" style="width:220px; height:220px; margin:0 auto;"></div>
</div>

<script>
  const player = window.lottie.loadAnimation({
    container: document.getElementById('lab-lottie-player'),
    renderer: 'svg',
    loop: false,
    autoplay: false,
    path: '../../assets/lottie/star-character.json'
  });
  
  // Controle milimétrico:
  player.setSpeed(1.5);
  player.playSegments([0, 100], true); // Toca só a entrada
</script>
02 · Casos de Uso Reais do Dia a Dia Ao vivo
1. FEEDBACK DE AÇÃO

Confirmação de Envio

Dispara a animação a 2× de velocidade para dar resposta tátil ao usuário.

Clique para disparar
2. LOADER CONTÍNUO

Estado de Espera

Loop vetorial leve que economiza CPU e nunca perde nitidez.

Parado para poupar recursos
3. SCRUB DE PROGRESSO

Progresso em Tempo Real

Arraste o slider para ver a ilustração evoluir de 0% a 100%.

0%
Progresso sem play
<!-- 3 aplicações práticas do mesmo JSON -->
<!-- 1. Feedback de Envio no Clique -->
<button id="demo-feedback-btn">Enviar Mensagem</button>

<!-- 2. Loader em Loop Contínuo -->
<div id="demo-loader-stage"></div>

<!-- 3. Barra de Progresso com Scrubber -->
<input type="range" id="demo-progress-scrubber" min="0" max="100">
03 · Uso Declarativo no HTML (data-sw="lottie") Ao vivo
HOVER BIDIRECIONAL
Passe o mouse por cima
AUTOPLAY + LOOP
Reprodução constante
<!-- 1. Ícone interativo com animação ao passar o mouse -->
<div 
  data-sw="lottie" 
  data-sw-src="../../assets/lottie/star-character.json"
  data-sw-hover
  data-sw-speed="1.5"
  style="width: 140px; height: 140px; margin: 0 auto; cursor: pointer;">
</div>

<!-- 2. Animação contínua em loop -->
<div 
  data-sw="lottie" 
  data-sw-src="../../assets/lottie/star-character.json"
  data-sw-autoplay
  data-sw-loop
  style="width: 140px; height: 140px; margin: 0 auto;">
</div>
04 · Consulta e Controle via API JavaScript (SWMotion.lottie) Referência
// Instanciação manual com controle fino via JavaScript:
const container = document.querySelector('#meu-lottie');

const player = SWMotion.lottie(container, {
  src: 'animacao.json',
  speed: 1.5,
  loop: false,
  autoplay: false
});

// Manipulando a timeline:
player.goToAndPlay(0, true);
player.playSegments([50, 150], true);
player.setDirection(-1);

Atributos

data-sw="lottie"
no container para inicializar o player Lottie
data-sw-src="animacao.json"
caminho relativo ou absoluto do arquivo JSON
data-sw-autoplay
inicia a reprodução assim que o JSON for decodificado
data-sw-loop
mantém a animação em repetição contínua
data-sw-hover
toca ao passar o mouse e retrocede ao sair
data-sw-click
executa uma vez como feedback de clique
data-sw-speed="1.5"
multiplicador de velocidade de reprodução (padrão: 1)
data-sw-mode="scroll"
sincroniza a timeline do JSON com o progresso de rolagem da página

Variantes

SVG Nativo
Desenha elementos <path> vetoriais perfeitamente nítidos em monitores Retina e 4K
Hover Bidirecional
Avança suavemente na entrada do cursor e volta ao frame zero na saída
Feedback de Ação
Dispara segmentos específicos para confirmar envios, sucesso ou erros
Scrubber de Frame
Posiciona em qualquer instante exato com goToAndStop(frame) sem dar play

Eventos

DOMLoaded
Disparado assim que a estrutura SVG é injetada no DOM
enterFrame
Disparado a cada frame renderizado na timeline
complete
Disparado quando a animação chega ao último frame (se não estiver em loop)

API (JavaScript)

SWMotion.lottie(element, options)
Inicializa programaticamente uma animação Lottie no elemento.
anim.play() / anim.pause()
Controla a execução da timeline.
anim.goToAndStop(frame, true)
Pula diretamente para um frame específico e pausa.
anim.goToAndPlay(frame, true)
Pula para um frame e inicia a reprodução a partir dele.
anim.setSpeed(velocidade)
Altera a velocidade em tempo real (ex.: 0.5, 1.5, 2).
anim.setDirection(1 | -1)
Altera o sentido da timeline (1 para frente, -1 para trás).
anim.playSegments([inicio, fim], true)
Executa exclusivamente o trecho delimitado entre dois frames.

Requisitos

  • JSON exportado no padrão Bodymovin/Lottie (do After Effects, Figma ou LottieFiles).
  • Respeito automático a prefers-reduced-motion: o player posiciona a arte diretamente no frame final estático sem disparar animações contínuas.

Limitações — o que ele não faz

  • O Lottie é vetorial — não é indicado para cenas fotográficas, texturas realistas ou vídeos de alta densidade de imagem (para esses casos, use Vídeo tradicional ou Vídeo no scroll).
  • Requer o arquivo de runtime local vendor/lottie-light.min.js carregado na página.