SVG Draw (traço) Animações
O contorno de um desenho SVG se desenha sozinho, como se fosse feito à mão, quando aparece na tela — sw-ani="svg-draw".
O que é
Pega uma linha de um desenho SVG (uma curva, um "check", uma assinatura, um círculo) e faz ela aparecer sendo traçada, do começo ao fim. Serve para sublinhar um título, mostrar um "pedido confirmado", desenhar a rota entre etapas ou dar vida a uma ilustração de linha.
O atributo vai na própria linha (<path>, <circle>, <polyline>…), não no <svg>. O SW Core mede sozinho o comprimento da linha, esconde e vai revelando. Por padrão ele desenha em meio segundo quando a linha chega a 85% da altura da tela, e apaga de novo se você rolar de volta para cima. Com a palavra scrub o desenho fica preso à rolagem: avança quando você desce, volta quando você sobe.
Quando usar
- Sublinhado ou rabisco em título de página de vendas: uma curva embaixo da palavra-chave.
- Confirmação (pedido feito, cadastro concluído): um "check" que se desenha.
- Rota, linha do tempo ou passo a passo: a linha ligando as etapas vai sendo traçada conforme a pessoa desce — use
scrub. - Ilustração ou assinatura exportada do Figma/Illustrator como linha (sem preenchimento).
Comece aqui
-
1
Coloque o SW Core e o pacote de animação. O
swcore.motion.min.jsjá traz o GSAP dentro e tem que vir 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="svg-draw"na linha do desenho. Ela precisa defill="none"e de umstroke(a cor do traço). Role a página até aqui e veja: ele se desenha ao aparecer.<svg viewBox="0 0 120 40" width="240" height="80" class="t-pri"> <path sw-ani="svg-draw" d="M4 30 Q 30 4 60 22 T 116 12" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"/> </svg>
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. Desenha quando aparece (padrão)
Sem nenhuma palavra extra: desenha em meio segundo quando a linha entra na tela e apaga se você rolar de volta para cima. Role para cima e para baixo para ver de novo.
<svg viewBox="0 0 120 40" width="200" height="66" class="t-pri">
<path sw-ani="svg-draw" d="M4 30 Q 30 4 60 22 T 116 12" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 240 80" width="200" height="66" class="t-pri">
<path sw-ani="svg-draw" d="M10 55 C 30 10, 50 10, 60 45 S 80 70, 95 40 S 120 5, 140 45 S 170 75, 200 30 L 230 45" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 200 100" width="200" height="100">
<path sw-ani="svg-draw" class="t-pri" d="M20 80 L 60 30" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round"/>
<path sw-ani="svg-draw" class="t-suc" d="M60 30 L 100 70" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round"/>
<path sw-ani="svg-draw" class="t-ale" d="M100 70 L 140 20" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round"/>
<path sw-ani="svg-draw" class="t-err" d="M140 20 L 180 50" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round"/>
</svg>
2. Espessura, cor e ponta
Espessura, cor e ponta são do próprio SVG (stroke-width, stroke, stroke-linecap), não do SW Core. Dica: use stroke="currentColor" e uma classe de cor de texto (t-pri, t-suc…) — assim o traço acompanha o tema claro e escuro.
<svg viewBox="0 0 120 40" width="200" height="66" class="t-pri">
<path sw-ani="svg-draw" d="M4 30 Q 30 4 60 22 T 116 12" fill="none" stroke="currentColor" stroke-width="1"/>
</svg>
<svg viewBox="0 0 120 40" width="200" height="66" class="t-err">
<path sw-ani="svg-draw" d="M4 30 Q 30 4 60 22 T 116 12" fill="none" stroke="currentColor" stroke-width="7" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 120 40" width="200" height="66" class="t-suc">
<path sw-ani="svg-draw" d="M4 30 Q 30 4 60 22 T 116 12" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 120 40" width="200" height="66">
<path sw-ani="svg-draw" d="M4 30 Q 30 4 60 22 T 116 12" fill="none" stroke="#f97316" stroke-width="3" stroke-linecap="round"/>
</svg>
3. Outras formas além do
Funciona em qualquer forma de linha do SVG: <polyline>, <line>, <circle>, <rect>. O círculo começa a ser desenhado pela direita (3 horas); o retângulo, pelo canto de cima à esquerda.
<svg viewBox="0 0 24 24" width="72" height="72" class="t-suc">
<polyline sw-ani="svg-draw" points="4 12 10 18 20 6" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<svg viewBox="0 0 60 60" width="72" height="72" class="t-pri">
<circle sw-ani="svg-draw" cx="30" cy="30" r="24" fill="none" stroke="currentColor" stroke-width="3"/>
</svg>
<svg viewBox="0 0 100 60" width="120" height="72" class="t-inf">
<rect sw-ani="svg-draw" x="4" y="4" width="92" height="52" rx="4" fill="none" stroke="currentColor" stroke-width="2.5"/>
</svg>
<svg viewBox="0 0 120 10" width="200" height="16" class="t-pri">
<line sw-ani="svg-draw" x1="2" y1="5" x2="118" y2="5" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
</svg>
4. Preso à rolagem (scrub)
Acrescente a palavra scrub: o desenho avança conforme você desce e volta conforme você sobe — quem controla é a barra de rolagem. Com sw-ani-scrub="1" ele "persegue" a rolagem com 1 segundo de suavidade.
<svg viewBox="0 0 240 80" width="200" height="66" class="t-pri">
<path sw-ani="svg-draw scrub" d="M10 55 C 30 10, 50 10, 60 45 S 80 70, 95 40 S 120 5, 140 45 S 170 75, 200 30 L 230 45" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
</svg>
<svg viewBox="0 0 240 80" width="200" height="66" class="t-sec">
<path sw-ani="svg-draw" sw-ani-scrub="1" d="M10 55 C 30 10, 50 10, 60 45 S 80 70, 95 40 S 120 5, 140 45 S 170 75, 200 30 L 230 45" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
</svg>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Onde colocar | ||
sw-ani="svg-draw" | Liga o efeito. Vai na linha (<path>, <polyline>, <line>, <circle>, <rect>…), nunca no <svg>. | <path sw-ani="svg-draw" …/> |
| Gatilho | ||
(nenhum) | Padrão: desenha em meio segundo quando a linha chega a 85% da altura da tela; apaga ao rolar de volta para cima. | sw-ani="svg-draw" |
scrub | Palavra dentro do sw-ani: o desenho fica preso à barra de rolagem. | sw-ani="svg-draw scrub" |
sw-ani-scrub | Mesma coisa, com um número = segundos de suavidade (a linha "persegue" a rolagem). | sw-ani-scrub="1" |
| Aparência (do próprio SVG) | ||
fill="none" | Obrigatório: é o contorno que anima, não o preenchimento. | fill="none" |
stroke | Cor do traço. currentColor + classe t-pri/t-suc… segue o tema. | stroke="currentColor" |
stroke-width | Espessura do traço. | stroke-width="3" |
stroke-linecap | Ponta do traço: round (redonda) fica mais "desenhado à mão". | stroke-linecap="round" |
| Avançado | ||
data-sw-force | Anima mesmo para quem ativou "reduzir movimento" no sistema (por padrão essa pessoa vê o traço já pronto). | <path sw-ani="svg-draw" data-sw-force …/> |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
Seu site pronto em 7 dias
<h2>Seu site
<span class="rel iflx f-cl alc">pronto
<svg viewBox="0 0 120 16" width="140" height="18" class="t-pri">
<path sw-ani="svg-draw" d="M3 11 C 30 3, 70 3, 117 9"
fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round"/>
</svg>
</span>
em 7 dias</h2>
<div class="flx f-cl alc gap-3 t-ct">
<svg viewBox="0 0 60 60" width="96" height="96" class="t-suc">
<circle sw-ani="svg-draw" cx="30" cy="30" r="26" fill="none" stroke="currentColor" stroke-width="3"/>
<polyline sw-ani="svg-draw" points="18 31 26 39 43 22" fill="none" stroke="currentColor" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<strong class="t-g">Pedido confirmado!</strong>
<span class="t-mut">Enviamos os detalhes para o seu e-mail.</span>
</div>
<svg viewBox="0 0 300 60" class="w-fl t-pri" height="70">
<path sw-ani="svg-draw scrub" d="M20 30 C 70 0, 110 60, 150 30 S 230 0, 280 30"
fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"/>
</svg>
<div class="flx j-sb w-fl">
<span>1. Briefing</span><span>2. Layout</span><span>3. No ar</span>
</div>
API (JavaScript)
SWMotion.refresh()Precisa de quê
swcore.motion.min.js(já traz o GSAP) eswcore.motion.min.css, carregados antes doswcore.min.js.- Um SVG com linha de verdade:
fill="none"e umstrokevisível.
Cuidados — erros comuns
- Colocar
sw-ani="svg-draw"no<svg>não faz nada (aparece um aviso no console). O atributo vai em cada linha que você quer desenhar. - Desenho com preenchimento (
fillcolorido) não "se desenha": o preenchimento aparece inteiro de cara. Deixefill="none". - Linha tracejada (
stroke-dasharray) perde o tracejado: o efeito usa essa mesma propriedade para esconder e revelar. - Texto (
<text>) não é linha. Para "escrever" uma palavra, converta o texto em contorno (path) no editor de vetor. - Ícone exportado de biblioteca costuma vir com preenchimento, não com linha — confira se o SVG é "outline/stroke".
- Quer só um traço simples sem GSAP? Existe o mini-componente
sw-draw, em CSS puro — veja Mini-componentes animados.
O que ele não faz
- A velocidade do desenho automático não é configurável (fica em meio segundo). Para controlar o ritmo, use
scrube deixe a rolagem mandar. - O ponto de partida é fixo (quando a linha chega a 85% da altura da tela).
- Quem ativou "reduzir movimento" no sistema vê o traço já pronto, sem animação (a menos que você use
data-sw-force).

