Motion Path Animações
Um ícone ou objeto anda por cima de uma linha desenhada por você — preso à rolagem ou sozinho. sw-ani="motion-path" + sw-ani-path.
O que é
Você desenha um caminho (uma curva em SVG) e escolhe um elemento — um ícone, um avião de papel, uma caixinha — para percorrer esse caminho. Por padrão, quem manda é a rolagem: desceu a página, o objeto avança; subiu, ele volta. Também dá para ele andar sozinho quando aparece na tela, uma vez ou indo e voltando sem parar.
São duas peças, lado a lado dentro da mesma caixa: o <svg sw-ani-path> com o caminho (um <path> dentro) e o elemento com sw-ani="motion-path", que anda por cima. A linha-guia pode ficar visível, clarinha ou invisível — o objeto segue o traçado de qualquer jeito.
Quando usar
- "Seu pedido a caminho": um pacote que vai de um ponto a outro conforme a pessoa rola.
- Topo de página com personalidade: um avião de papel ou foguete cruzando a tela em curva.
- Linha do tempo / etapas: um marcador que desce pela linha enquanto a pessoa lê.
- Detalhe decorativo que anda sozinho (bolinha orbitando, ícone passeando):
sw-ani-play="auto".
Comece aqui
-
1
Coloque o SW Core e o pacote de animação (o
swcore.motion.min.jsjá traz o GSAP e vem antes doswcore.min.js). O segundo CSS só é preciso se usar íconesswi-*.<!-- no <head> --> <link rel="stylesheet" href="swcore/swcore.min.css"> <link rel="stylesheet" href="swcore/swcore.compl.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
Dentro de uma caixa com
class="rel", coloque o SVG com o caminho (sw-ani-path) e, ao lado dele, o elemento que anda (sw-ani="motion-path"). Role a página devagar: o coração acompanha.<div class="rel"> <svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-3"> <path d="M10,60 Q85,0 160,60 T310,60" fill="none" stroke="currentColor" stroke-width="2"/> </svg> <i sw-ani="motion-path" class="swi-heart abs pin-t pin-l t-pri t-gg"></i> </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. Preso à rolagem (padrão)
O objeto sai do começo da linha quando ela aparece embaixo da tela e chega ao fim quando ela some em cima. Role devagar, para cima e para baixo.
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-3">
<path d="M10,60 Q85,0 160,60 T310,60" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
<i sw-ani="motion-path" class="swi-heart abs pin-t pin-l t-pri t-gg"></i>
</div>
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-0">
<path d="M10,110 C 90,0 230,0 310,110" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
<i sw-ani="motion-path" class="swi-send abs pin-t pin-l t-pri t-gg"></i>
</div>
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-5">
<path d="M10,100 C 60,10 120,120 170,60 S 260,10 310,90"
fill="none" stroke="currentColor" stroke-width="2" stroke-dasharray="5 5"/>
</svg>
<i sw-ani="motion-path" class="swi-package abs pin-t pin-l t-suc t-gg"></i>
</div>
2. Andando sozinho (sw-ani-play="auto")
Com sw-ani-play="auto" a rolagem não manda mais: o objeto percorre a linha sozinho quando ela chega a 85% da altura da tela. sw-ani-duration muda o tempo (em segundos) e sw-ani-repeat="true" faz ir e voltar sem parar.
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-3">
<path d="M10,60 Q85,0 160,60 T310,60" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
<i sw-ani="motion-path" sw-ani-play="auto" class="swi-star abs pin-t pin-l t-ale t-gg"></i>
</div>
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-3">
<path d="M10,60 Q85,0 160,60 T310,60" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
<i sw-ani="motion-path" sw-ani-play="auto" sw-ani-duration="6"
class="swi-star abs pin-t pin-l t-ale t-gg"></i>
</div>
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-3">
<path d="M10,110 C 90,0 230,0 310,110" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
<i sw-ani="motion-path" sw-ani-play="auto" sw-ani-repeat="true"
class="swi-rocket abs pin-t pin-l t-pri t-gg"></i>
</div>
3. Suavidade na rolagem
No modo de rolagem, o objeto "persegue" a posição da página com 0,6 s de suavidade. Você pode mudar: scrub sozinho cola na rolagem sem atraso; sw-ani-scrub="2" deixa bem macio.
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-3">
<path d="M10,60 Q85,0 160,60 T310,60" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
<i sw-ani="motion-path scrub" class="swi-heart abs pin-t pin-l t-err t-gg"></i>
</div>
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 120" class="w-fl blk op-3">
<path d="M10,60 Q85,0 160,60 T310,60" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
<i sw-ani="motion-path" sw-ani-scrub="2" class="swi-heart abs pin-t pin-l t-err t-gg"></i>
</div>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| As duas peças | ||
sw-ani-path | No <svg> que tem o caminho. O SW Core usa o primeiro <path> de dentro dele. | <svg sw-ani-path viewBox="…"><path d="…"/></svg> |
sw-ani="motion-path" | No elemento que anda. Tem que estar na mesma caixa (mesmo pai) que o SVG. | <i sw-ani="motion-path" class="swi-heart"></i> |
| Gatilho | ||
(nenhum) | Padrão: preso à rolagem, com 0,6 s de suavidade. Anda enquanto o SVG atravessa a tela, de baixo até em cima. | sw-ani="motion-path" |
scrub | Palavra no sw-ani: preso à rolagem sem atraso nenhum. | sw-ani="motion-path scrub" |
sw-ani-scrub | Segundos de suavidade no modo rolagem. | sw-ani-scrub="2" |
sw-ani-play="auto" | Anda sozinho, uma vez, quando o SVG chega a 85% da altura da tela. | sw-ani-play="auto" |
sw-ani-duration | Só no modo auto: tempo do percurso em segundos (de 0,3 a 20). Padrão 2,4. | sw-ani-duration="6" |
sw-ani-repeat="true" | Só no modo auto: vai e volta sem parar. (A forma antiga data-sw-repeat="true" também funciona.) | sw-ani-repeat="true" |
| Avançado | ||
data-sw-force | Anima mesmo para quem ativou "reduzir movimento" no sistema. | data-sw-force |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<div class="bg-sur bd r-m p-3">
<div class="flx j-sb">
<span><i class="swi-store"></i> Loja</span>
<span><i class="swi-map-pin"></i> Sua casa</span>
</div>
<div class="rel">
<svg sw-ani-path viewBox="0 0 320 80" class="w-fl blk op-3">
<path d="M10,60 C 80,10 140,70 200,35 S 280,20 310,60"
fill="none" stroke="currentColor" stroke-width="2" stroke-dasharray="6 6"/>
</svg>
<i sw-ani="motion-path" class="swi-package abs pin-t pin-l t-pri t-gg"></i>
</div>
</div>
Fale com a gente
<section class="rel topo">
<h1>Fale com a gente</h1>
<!-- caminho invisível ocupando a seção toda -->
<svg sw-ani-path viewBox="0 0 320 120" class="abs pin op-0">
<path d="M-20,110 C 80,-20 220,140 340,10" fill="none" stroke="currentColor"/>
</svg>
<i sw-ani="motion-path" sw-ani-play="auto" sw-ani-duration="4" sw-ani-repeat="true"
class="swi-send abs pin-t pin-l t-xg"></i>
</section>
<div class="flx gap-4">
<div class="rel">
<svg sw-ani-path viewBox="0 0 20 200" width="20" height="200" class="blk op-3">
<path d="M10,5 L10,195" fill="none" stroke="currentColor" stroke-width="2"/>
</svg>
<i sw-ani="motion-path scrub" class="swi-check-circle abs pin-t pin-l t-suc t-g"></i>
</div>
<div class="flx f-cl j-sb">
<span><strong>2019</strong> — primeiro cliente</span>
<span><strong>2022</strong> — 100 sites no ar</span>
<span><strong>2026</strong> — sistema próprio</span>
</div>
</div>
API (JavaScript)
SWMotion.refresh()Precisa de quê
swcore.motion.min.js(já traz o GSAP com o plugin de caminho) eswcore.motion.min.css, antes doswcore.min.js.swcore.compl.min.csssó se o objeto que anda for um íconeswi-*.
Cuidados — erros comuns
- O SVG e o objeto precisam ser irmãos (mesmo pai). Se o SW Core não achar um
sw-ani-pathao lado, ele usa o primeiro da página inteira — e o objeto vai andar na linha errada. - Um
sw-ani-pathpor caixa. Dois caminhos na mesma caixa: vale só o primeiro. - O caminho tem que ser
<path>.<circle>,<rect>e<line>dentro do SVG são ignorados — converta para path no editor de vetor. - O "vai e volta" (
sw-ani-repeat="true") só funciona junto comsw-ani-play="auto". - Sem
abs pin-t pin-lno objeto ele ocupa espaço embaixo do SVG antes de começar a andar, empurrando o resto da página.
O que ele não faz
- O objeto não gira acompanhando a curva — ele só se desloca. Um avião continua apontando para o mesmo lado o percurso todo.
- O ponto em que o percurso começa e termina na rolagem é fixo (do SVG entrar embaixo até sair em cima).
- Quem ativou "reduzir movimento" no sistema vê o objeto parado no caminho.

