SW Core
SW Core / JavaScript / Máquina de escrever

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. 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. 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.

Aqui você encontra pão, café e bolo.
JSON — aceita vírgula dentro da 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>
Atendemos Recife
Lista separada por vírgula — mais simples
<span class="t-g">
  Atendemos
  <span sw-typewriter sw-typewriter-words="Recife,Olinda,Jaboatão">Recife</span>
</span>
Seja bem-vindo à nossa loja.
Sem lista — digita o texto de dentro (sem vírgulas!) <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).

com calma…
sw-typewriter-speed="220" — digita devagar
<span class="t-g">
  <span sw-typewriter sw-typewriter-speed="220" sw-typewriter-words='["com calma…","letra por letra."]'>com calma…</span>
</span>
bem rápido!
sw-typewriter-speed="35" sw-typewriter-back="20" — rápido
<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>
leia com calma.
sw-typewriter-delay="4000" — fica 4 s parada
<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).

primeira,
Padrão — repete
<span class="t-g">
  <span sw-typewriter sw-typewriter-words='["primeira,","segunda,","terceira."]'>primeira,</span>
</span>
Olá!
sw-typewriter-loop="false" — para na última
<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.

barra
Padrão — | <span class="t-g"><span sw-typewriter sw-typewriter-words='["barra","piscando"]'>barra</span></span>
bloco
sw-typewriter-cur="▌" — bloco <span class="t-g"> <span sw-typewriter sw-typewriter-cur="▌" sw-typewriter-words='["bloco","de terminal"]'>bloco</span> </span>
traço
sw-typewriter-cur="_" — traço <span class="t-g"> <span sw-typewriter sw-typewriter-cur="_" sw-typewriter-words='["traço","embaixo"]'>traço</span> </span>
sem cursor
sw-typewriter-cur="" — sem cursor <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

PalavraO que fazExemplo
Frases
sw-typewriterLiga o efeito no elemento (use num <span> dentro do título).<span sw-typewriter>…</span>
sw-typewriter-wordsA 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-speedPor letra, ao digitar. Padrão: 100.sw-typewriter-speed="60"
sw-typewriter-backPor letra, ao apagar. Padrão: 50.sw-typewriter-back="30"
sw-typewriter-delayPausa 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-curCaractere 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-txtO texto sendo digitado.
.sw-typewriter-curO cursor (pisca a cada 1 s).

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Topo de landing page com a parte que muda na cor da marca Ao vivo

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>
Apresentação que digita uma vez e para Ao vivo

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>
Estilo terminal Ao vivo
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)
Liga os elementos [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) e swcore.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-label do título (veja a primeira receita).
  • Colocar sw-typewriter no 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.