Cursor personalizado Animações
Troca ou acompanha a setinha do mouse na página inteira: um ponto, um anel, a sua logo — com movimento liso ou elástico. sw-ani="cursor" no <body>.
O que é
Cria um cursor desenhado que segue o mouse pela página toda. Pode ser um ponto, um anel ou uma imagem (a sua logo), pode "colar" no ponteiro ou vir atrás dele com atraso, e pode até se mover como uma mola, esticando e inclinando conforme a velocidade. Em cima de links e botões ele cresce, para mostrar que ali dá para clicar.
Você coloca sw-ani="cursor" no <body> e escolhe o tipo em sw-ani-cursor. Todas as outras opções também são sw-ani-cursor-… (tamanho, cor, imagem, física). O cursor novo só aparece em aparelho com mouse; no celular e no tablet nada muda. Por padrão a setinha do sistema continua lá, por baixo — para escondê-la, use sw-ani-cursor-hide-native.
Quando usar
- Portfólio, agência, fotógrafo, estúdio: sites em que a experiência faz parte do produto.
- Landing de campanha ou lançamento, com a logo seguindo o mouse.
- Evite em loja, formulário, painel administrativo e site de conteúdo: ali o visitante quer a setinha de sempre.
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).<!-- 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="cursor"e o tipo no<body>. Pronto: vale para a página inteira.<body sw-ani="cursor" sw-ani-cursor="ring"> …seu site… </body>
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. Tipo (sw-ani-cursor)
O cursor vale para a página inteira, então aqui cada quadro é um botão: clique para ligar aquela versão nesta página e mexa o mouse. "Desligar" volta ao normal. (Só funciona com mouse — no celular não aparece nada.)
<body> <!-- sem sw-ani="cursor" -->
<body sw-ani="cursor" sw-ani-cursor="dot">
<body sw-ani="cursor" sw-ani-cursor="ring">
<body sw-ani="cursor" sw-ani-cursor="image" sw-ani-cursor-img="/logo-clara.webp" sw-ani-cursor-img-light="/logo-escura.webp" sw-ani-cursor-size="44">
2. Tamanho e cor
O tamanho é em pixels (padrão 10). A cor padrão é branca com "mistura de diferença": ela se inverte sobre o que está embaixo, então aparece em fundo claro e escuro. Com outra cor, troque a mistura para normal.
<body sw-ani="cursor" sw-ani-cursor="dot" sw-ani-cursor-size="24">
<body sw-ani="cursor" sw-ani-cursor="ring" sw-ani-cursor-size="40">
<body sw-ani="cursor" sw-ani-cursor="dot" sw-ani-cursor-size="14" sw-ani-cursor-color="var(--sw-pri)" sw-ani-cursor-mix="normal">
<body sw-ani="cursor" sw-ani-cursor="ring" sw-ani-cursor-size="28" sw-ani-cursor-hide-native>
3. Movimento
sw-ani-cursor-lerp diz o quanto ele "alcança" o ponteiro a cada quadro: 1 = colado, 0.05 = bem atrasado (padrão 0.16). sw-ani-cursor-physics="elastic" troca por uma mola: vem atrás, estica e inclina conforme a velocidade, e fica um pouco ao lado do ponteiro.
<body sw-ani="cursor" sw-ani-cursor="ring" sw-ani-cursor-size="28" sw-ani-cursor-lerp="1">
<body sw-ani="cursor" sw-ani-cursor="ring" sw-ani-cursor-size="28" sw-ani-cursor-lerp="0.05">
<body sw-ani="cursor" sw-ani-cursor="dot" sw-ani-cursor-size="18" sw-ani-cursor-physics="elastic">
<body sw-ani="cursor" sw-ani-cursor="image" sw-ani-cursor-img="/logo-clara.webp" sw-ani-cursor-img-light="/logo-escura.webp" sw-ani-cursor-size="56" sw-ani-cursor-physics="elastic">
4. Crescer em cima do que é clicável
Com o cursor ligado (ponto ou anel), passe o mouse por cima destes: links, botões, elementos com sw-ani="magnetic" e qualquer coisa marcada com data-sw-cursor-hover fazem ele crescer (3,6 vezes). No modo imagem ele não cresce.
<a href="/projeto" sw-btn="pri p">Ver projeto</a>
<div data-sw-cursor-hover class="bg-sur bd r-m p-3">Foto do projeto</div>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Ligar e tipo | ||
sw-ani="cursor" | Liga o cursor personalizado. Coloque no <body>. | <body sw-ani="cursor"> |
sw-ani-cursor | dot (ponto, padrão) · ring (anel) · image (imagem). | sw-ani-cursor="ring" |
sw-ani-cursor-img | A imagem do cursor. Com ela, o tipo vira imagem. | sw-ani-cursor-img="/logo.webp" |
sw-ani-cursor-img-light | Outra imagem só para o tema claro (troca sozinha com o dia/noite). | sw-ani-cursor-img-light="/logo-escura.webp" |
| Aparência | ||
sw-ani-cursor-size | Tamanho em px, de 2 a 200. Padrão: 10. | sw-ani-cursor-size="24" |
sw-ani-cursor-color | Cor do ponto (ou da borda do anel). Padrão: #fff. | sw-ani-cursor-color="var(--sw-pri)" |
sw-ani-cursor-mix | Como a cor se mistura com o fundo (mix-blend-mode do CSS). Padrão: difference (inverte, aparece em qualquer fundo). Use normal para a cor aparecer como é. | sw-ani-cursor-mix="normal" |
sw-ani-cursor-hide-native | Sem valor. Esconde a setinha do sistema. | sw-ani-cursor-hide-native |
| Movimento | ||
sw-ani-cursor-lerp | Quanto ele alcança o ponteiro a cada quadro, de 0.02 a 1. Padrão: 0.16. 1 = colado. | sw-ani-cursor-lerp="0.08" |
sw-ani-cursor-physics | elastic = mola que estica e inclina. Sem ela: movimento liso. | sw-ani-cursor-physics="elastic" |
sw-ani-cursor-tension | Só no elastic: força da mola, de 0.005 a 1. Padrão: 0.042. | sw-ani-cursor-tension="0.08" |
sw-ani-cursor-friction | Só no elastic: freio da mola, de 0.5 a 0.99. Padrão: 0.84 (maior = balança mais). | sw-ani-cursor-friction="0.9" |
sw-ani-cursor-offset-x / -y | Distância do ponteiro em px, de -200 a 200. Padrão: 0 (no elastic: 18 e 14). | sw-ani-cursor-offset-x="0" |
| Crescer em cima | ||
data-sw-cursor-hover | Em qualquer elemento da página: faz o cursor crescer em cima dele (links, botões e sw-ani="magnetic" já crescem sozinhos). | <div data-sw-cursor-hover>…</div> |
| Avançado | ||
data-sw-force | Liga o cursor mesmo para quem ativou "reduzir movimento" no sistema. | <body sw-ani="cursor" data-sw-force> |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<body sw-ani="cursor" sw-ani-cursor="ring" sw-ani-cursor-size="28" sw-ani-cursor-hide-native>
<a href="/projeto-1" class="trabalho">…</a> <!-- link: cresce sozinho -->
<figure data-sw-cursor-hover>…</figure> <!-- bloco comum: marque para crescer -->
</body>
<body sw-ani="cursor" sw-ani-cursor="image"
sw-ani-cursor-img="/logo-clara.webp"
sw-ani-cursor-img-light="/logo-escura.webp"
sw-ani-cursor-size="64"
sw-ani-cursor-physics="elastic">
<body sw-ani="cursor" sw-ani-cursor="dot"
sw-ani-cursor-size="12"
sw-ani-cursor-color="var(--sw-pri)"
sw-ani-cursor-mix="normal"
sw-ani-cursor-lerp="1">
Precisa de quê
swcore.motion.min.js(já traz o GSAP) eswcore.motion.min.css, antes doswcore.min.js.- Mouse (ou caneta/trackpad). Em tela de toque o cursor não é criado.
Cuidados — erros comuns
sw-ani-cursor="image"semsw-ani-cursor-imgdeixa o cursor invisível. Sempre informe a imagem.- Logo escura some no tema escuro (e clara some no claro): use
sw-ani-cursor-imgpara o escuro esw-ani-cursor-img-lightpara o claro. - Cor diferente de branco com a mistura padrão (
difference) sai com a cor "invertida". Coloquesw-ani-cursor-mix="normal". - Se esconder a setinha do sistema (
sw-ani-cursor-hide-native), garanta que o seu cursor apareça em todo fundo — senão o visitante "perde" o mouse. - Um só por página: coloque no
<body>, não em vários elementos.
O que ele não faz
- Não aparece em celular e tablet (sem mouse).
- Quem ativou "reduzir movimento" no sistema não vê o cursor personalizado (a menos que você use
data-sw-force). - Não tem como desligar por JavaScript depois de ligado: para tirar, recarregue a página sem o atributo.

