Máquina de escrever JavaScript
Texto que se digita sozinho, letra por letra, com cursor piscando — e apaga para escrever a próxima frase. O clássico "Fazemos sites rápidos. / bonitos. / que vendem."
O que é
Serve para dar vida ao título principal de uma página: uma parte fixa ("Fazemos sites") e uma parte que vai trocando ("rápidos", "bonitos", "que vendem"). Você coloca sw-typewriter num <span> e passa a lista de frases em sw-typewriter-words. Ele digita a primeira, espera, apaga, digita a próxima — e recomeça. Velocidade, pausa, cursor e se ele para no fim são ajustáveis.
Precisa do JavaScript do SW Core. Ao ligar, ele apaga o que estava escrito dentro do elemento e começa a digitar. O cursor é um caractere (padrão |) que pisca via CSS. A lista pode ser escrita como JSON ('["a","b"]') ou simplesmente separada por vírgulas ("a,b").
Quando usar
- Título do topo de uma landing page, com a parte que muda destacada.
- Apresentação curta ("Olá, eu sou a Ana — designer") que digita uma vez e para:
sw-typewriter-loop="false". - Evite em texto longo ou importante para leitura: a pessoa tem que esperar para ler.
Comece aqui
-
1
Coloque o SW Core na página.
<link rel="stylesheet" href="swcore/swcore.min.css"> <!-- fim do body --> <script src="swcore/swcore.min.js"></script> -
2
Um
<span>com a lista de frases. Deixe a primeira escrita dentro: é o que aparece se o JavaScript não carregar (e o que o Google lê).Fazemos sites rápidos.
<h1>Fazemos sites <span sw-typewriter sw-typewriter-words='["rápidos.","bonitos.","que vendem."]'>rápidos.</span> </h1>
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. De onde vêm as frases
Três jeitos de passar a lista. Atenção ao terceiro: sem sw-typewriter-words, ele usa o texto de dentro — e vírgulas no texto viram quebras de frase.
<span class="t-g">
Aqui você encontra
<span sw-typewriter sw-typewriter-words='["pão, café e bolo.","doces de festa."]'>pão, café e bolo.</span>
</span>
<span class="t-g">
Atendemos
<span sw-typewriter sw-typewriter-words="Recife,Olinda,Jaboatão">Recife</span>
</span>
<span sw-typewriter sw-typewriter-loop="false">Seja bem-vindo à nossa loja.</span>
2. Velocidade e pausa
Tudo em milissegundos. sw-typewriter-speed = tempo por letra ao digitar (padrão 100), sw-typewriter-back = tempo por letra ao apagar (padrão 50), sw-typewriter-delay = quanto a frase fica parada, completa, antes de apagar (padrão 1500).
<span class="t-g">
<span sw-typewriter sw-typewriter-speed="220" sw-typewriter-words='["com calma…","letra por letra."]'>com calma…</span>
</span>
<span class="t-g">
<span sw-typewriter sw-typewriter-speed="35" sw-typewriter-back="20" sw-typewriter-words='["bem rápido!","quase instantâneo!"]'>bem rápido!</span>
</span>
<span class="t-g">
<span sw-typewriter sw-typewriter-delay="4000" sw-typewriter-words='["leia com calma.","depois eu troco."]'>leia com calma.</span>
</span>
3. Repetir ou parar no fim
Por padrão, depois da última frase ele volta para a primeira, para sempre. Com sw-typewriter-loop="false", digita a última e para (sem apagar).
<span class="t-g">
<span sw-typewriter sw-typewriter-words='["primeira,","segunda,","terceira."]'>primeira,</span>
</span>
<span class="t-g">
<span sw-typewriter sw-typewriter-loop="false" sw-typewriter-words='["Olá!","Eu sou a Ana,","designer em Recife."]'>Olá!</span>
</span>
4. Cursor
sw-typewriter-cur troca o caractere do cursor (padrão |). Vazio ("") tira o cursor.
<span class="t-g"><span sw-typewriter sw-typewriter-words='["barra","piscando"]'>barra</span></span>
<span class="t-g">
<span sw-typewriter sw-typewriter-cur="▌" sw-typewriter-words='["bloco","de terminal"]'>bloco</span>
</span>
<span class="t-g">
<span sw-typewriter sw-typewriter-cur="_" sw-typewriter-words='["traço","embaixo"]'>traço</span>
</span>
<span class="t-g">
<span sw-typewriter sw-typewriter-cur="" sw-typewriter-words='["sem cursor","só o texto"]'>sem cursor</span>
</span>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Frases | ||
sw-typewriter | Liga o efeito no elemento (use num <span> dentro do título). | <span sw-typewriter>…</span> |
sw-typewriter-words | A lista: JSON ('["a","b"]') ou separada por vírgula ("a,b"). Sem ela, usa o texto de dentro (vírgulas separam frases). | sw-typewriter-words='["rápidos.","bonitos."]' |
| Tempo (milissegundos) | ||
sw-typewriter-speed | Por letra, ao digitar. Padrão: 100. | sw-typewriter-speed="60" |
sw-typewriter-back | Por letra, ao apagar. Padrão: 50. | sw-typewriter-back="30" |
sw-typewriter-delay | Pausa com a frase completa, antes de apagar. Padrão: 1500. | sw-typewriter-delay="3000" |
| Comportamento | ||
sw-typewriter-loop | "false" para na última frase. Padrão: repete. | sw-typewriter-loop="false" |
sw-typewriter-cur | Caractere do cursor. Padrão: |. Vazio tira o cursor. | sw-typewriter-cur="▌" |
| Visual (classes que ele cria — mude no CSS da sua página se quiser) | ||
.sw-typewriter-txt | O texto sendo digitado. | |
.sw-typewriter-cur | O cursor (pisca a cada 1 s). | |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
Seu negócio merece um site rápido.
<h1 aria-label="Seu negócio merece um site rápido, bonito e que vende.">
Seu negócio merece um site
<span class="t-pri" sw-typewriter sw-typewriter-words='["rápido.","bonito.","que vende."]'>rápido.</span>
</h1>
<a href="/contato" sw-btn="pri pill g">Quero meu site</a>
Olá!
<p class="t-gg"><span sw-typewriter sw-typewriter-loop="false" sw-typewriter-speed="70" sw-typewriter-words='["Olá!","Eu sou a Ana.","Faço identidade visual para pequenos negócios."]'>Olá!</span></p>
npm install swcore<div class="bg-3 r-m p-3"><code class="t-g"><span sw-typewriter sw-typewriter-cur="▌" sw-typewriter-speed="60" sw-typewriter-words='["npm install swcore","carregando…","pronto!"]'>npm install swcore</span></code></div>
API (JavaScript)
SW.Typewriter.initAll(raiz)[sw-typewriter] dentro de raiz. Normalmente não precisa: o SW Core liga sozinho, até os inseridos depois.Precisa de quê
swcore.min.css(o cursor piscando) eswcore.min.js(a digitação).
Cuidados — erros comuns
- Texto com vírgula dentro do elemento e sem
sw-typewriter-words: "Pão, café e bolo" vira duas frases ("Pão" e "café e bolo"). Passe a lista em JSON. - JSON com aspas duplas por fora (
sw-typewriter-words="["a","b"]"): quebra o HTML. Use aspas simples por fora:'["a","b"]'. - Deixar o elemento vazio: se o JavaScript falhar, o título fica sem a palavra, e o Google não lê nada ali. Escreva a primeira frase dentro.
- Leitor de tela lê a frase pela metade enquanto ela é digitada. Coloque a frase completa num
aria-labeldo título (veja a primeira receita). - Colocar
sw-typewriterno título inteiro: a parte fixa também é apagada e redigitada. Deixe o efeito só num<span>com a parte que muda.
O que ele não faz
- Não respeita a preferência "reduzir movimento" do sistema: o texto se move para todos.
- Só texto puro: negrito, links ou ícones dentro das frases não são mantidos.
- Não tem eventos nem funções para pausar ou trocar as frases pelo JavaScript.
- Com uma frase só e sem
sw-typewriter-loop="false", ele digita, apaga e redigita a mesma frase sem parar.

