SW Core
SW Core / JavaScript / Preloader

Preloader JavaScript

Tela de "carregando": cobre a página (ou só um pedaço dela) com um círculo girando, uma barra ou a sua logo, e some sozinha quando tudo termina de carregar.

O que é

É aquela tela que aparece por um instante enquanto o site abre, para a pessoa não ver a página se montando aos pedaços. Com <div sw-pre> no começo do <body>, ela cobre a tela inteira e desaparece com um esmaecer quando a página termina de carregar (fotos e fontes incluídas). Com a palavra box, ela cobre só um pedaço — um painel, um cartão, uma tabela — enquanto os dados daquele pedaço chegam.

Você escolhe o visual com palavras dentro do atributo, que podem ser combinadas: drk (fundo escuro), pri (fundo na cor do site), bar (barrinha no topo em vez do círculo) e box (cobre só o pai, não a tela). Dentro, coloque o indicador que quiser: o círculo (.sw-spinner), os três pontinhos (.sw-pre-dots) e/ou um texto (.sw-pre-lbl). A logo entra sozinha com sw-pre-logo. Vem no arquivo principal.

Quando usar

  • Site com muita foto ou vídeo no topo: a tela cheia esconde a montagem da página.
  • Pedaço da página que busca dados (tabela, painel, lista): sw-pre="box" só naquele pedaço, e o resto continua usável.
  • Evite em site leve: se a página abre rápido, a tela de carregando só atrasa a pessoa.

Comece aqui

  1. 1

    Coloque o SW Core na página (CSS no <head>, JS no fim do <body>).

    <link rel="stylesheet" href="swcore/swcore.min.css">
    
    <!-- fim do <body> -->
    <script src="swcore/swcore.min.js"></script>
  2. 2

    Para a tela cheia: logo no começo do <body>, antes de todo o conteúdo. Ela some sozinha quando a página termina de carregar. (Não mostramos ao vivo aqui porque cobriria esta documentação.)

    <body>
      <div sw-pre sw-pre-logo="/img/logo.webp">
        <div class="sw-spinner"></div>
      </div>
    
      …resto da página…
    </body>
  3. 3

    Para cobrir só um pedaço, acrescente box. Ele ocupa o elemento pai inteiro (aqui, esta caixa):

    Pedidos de hoje

    Carregando a lista…

    <div class="p-m">
      <strong>Pedidos de hoje</strong>
      <p>Carregando a lista…</p>
      <div sw-pre="box"><div class="sw-spinner"></div></div>
    </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. Cores do fundo

Todos os quadros usam box para cobrir só o quadro. No seu site, tire o box para cobrir a tela inteira — o visual é o mesmo.

Padrão — fundo da página <div sw-pre="box"><div class="sw-spinner"></div></div>
drk — fundo escuro <div sw-pre="box drk"><div class="sw-spinner"></div></div>
pri — fundo na cor primária (círculo branco) <div sw-pre="box pri"><div class="sw-spinner"></div></div>
sw-pre-bg — qualquer cor ou degradê <div sw-pre="box" sw-pre-bg="linear-gradient(135deg, #0f766e, #1d4ed8)"><div class="sw-spinner"></div></div>

2. O que aparece no meio

Você escolhe o indicador colocando o elemento dentro do sw-pre. Dá para juntar mais de um.

.sw-spinner — círculo girando <div sw-pre="box"><div class="sw-spinner"></div></div>
.sw-pre-dots — três pontinhos <div sw-pre="box"><div class="sw-pre-dots"><span></span><span></span><span></span></div></div>
Preparando seu pedido…
.sw-pre-lbl — texto embaixo <div sw-pre="box"><div class="sw-spinner"></div><span class="sw-pre-lbl">Preparando seu pedido…</span></div>
sw-pre-logo — a logo entra sozinha em cima <div sw-pre="box" sw-pre-logo="/img/logo.webp"> <div class="sw-pre-dots"><span></span><span></span><span></span></div> </div>
Carregando
pri + pontinhos + texto (ficam brancos) <div sw-pre="box pri"> <div class="sw-pre-dots"> <span></span> <span></span> <span></span> </div> <span class="sw-pre-lbl">Carregando</span> </div>

3. Barra no topo

Com bar, em vez do círculo no meio aparece uma barrinha correndo no alto e o fundo fica transparente — a página continua visível por baixo.

Conteúdo continua visível
bar — barrinha na cor primária <div sw-pre="box bar"></div>
Salvando…
bar + texto no meio <div sw-pre="box bar"><span class="sw-pre-lbl">Salvando…</span></div>

4. Mostrar e esconder pelo código

No modo box ele não some sozinho: você esconde quando os dados chegarem. SW.Pre.show(pai) cria um sobre o elemento e SW.Pre.hide(pai) tira.

Relatório de vendas

Setembro: 128 pedidos · R$ 18.430

Clique nos botões
<div id="painel" class="bd r-m p-m">…</div>

<button type="button" sw-btn="pri p" onclick="SW.Pre.show('#painel')">Mostrar carregando</button>
<button type="button" sw-btn="out p" onclick="SW.Pre.hide('#painel')">Esconder</button>

Tabela de opções

PalavraO que fazExemplo
Modo e visual (combináveis no mesmo atributo)
(nada)Tela cheia, fundo da página, some sozinho quando a página termina de carregar.<div sw-pre>
boxCobre só o elemento pai (o SW Core acerta o posicionamento do pai sozinho). Não some sozinho.sw-pre="box"
drkFundo escuro.sw-pre="drk"
priFundo na cor primária; círculo, pontinhos e texto ficam brancos.sw-pre="pri"
barBarrinha correndo no topo, fundo transparente.sw-pre="bar"
Extras
sw-pre-bgFundo livre: cor, degradê ou url(…) de uma imagem.sw-pre-bg="#0f172a"
sw-pre-logoEndereço da sua logo: ela aparece acima do indicador, sem precisar escrever a <img>.sw-pre-logo="/img/logo.webp"
O que vai dentro
.sw-spinnerCírculo girando.<div class="sw-spinner"></div>
.sw-pre-dotsTrês pontinhos pulsando (coloque 3 <span> dentro).<div class="sw-pre-dots"><span></span><span></span><span></span></div>
.sw-pre-lblTexto pequeno de apoio.<span class="sw-pre-lbl">Carregando…</span>

Receitas prontas — usos reais

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

Tela cheia com a logo, ao abrir o site Referência
<body>
  <div sw-pre="drk" sw-pre-logo="/img/logo-branca.webp">
    <div class="sw-spinner"></div>
  </div>

  <header>…</header>
  <main>…</main>
</body>

<!-- some sozinho ~0,15 s depois de a página terminar de carregar (fotos e fontes incluídas) -->
Cartão de painel enquanto os números chegam Ao vivo
Faturamento do mês

R$ 42.900

<div class="bd r-m p-m" id="cartao-faturamento">
  <strong>Faturamento do mês</strong>
  <p class="t-xg fw7 m-0" id="valor">—</p>
  <div sw-pre="box"><div class="sw-pre-dots"><span></span><span></span><span></span></div></div>
</div>

<script>
  fetch('/api/faturamento')
    .then((r) => r.json())
    .then((d) => {
      document.getElementById('valor').textContent = d.total;
      SW.Pre.hide('#cartao-faturamento');   // tira o carregando
    });
</script>
Junto com o AJAX declarativo: some sozinho Referência
<!-- quando o sw-ajax coloca o conteúdo novo no alvo, o carregando que estava lá é apagado junto -->
<button sw-ajax="/pedidos/lista" sw-target="#lista">Atualizar</button>

<div id="lista">
  <div sw-pre="box"><div class="sw-spinner"></div></div>
</div>
Esconder a tela cheia antes, quando os seus dados já chegaram Referência
<script>
  fetch('/api/destaques')
    .then((r) => r.json())
    .then(() => SW.Pre.hide('[sw-pre]'));   // não espera as fotos terminarem
</script>

API (JavaScript)

SW.Pre.hide(alvo)
Esconde (com esmaecer) e remove o carregando. alvo pode ser o próprio [sw-pre] ou o elemento que o contém — como texto ('#painel') ou elemento. Sem alvo, esconde todos.
SW.Pre.show(pai, { bg, logo, variant })
Cria um carregando dentro de pai (por padrão no modo box) e devolve o elemento. Se já existir um, devolve o que já está lá. O criado assim (mesmo o de tela cheia) só some com SW.Pre.hide.

Precisa de quê

  • swcore.min.css e swcore.min.js — já vem no pacote principal.

Cuidados — erros comuns

  • SW.Pre.hide() sem nada dentro esconde todos os carregandos da página. Para um só, diga qual: SW.Pre.hide('#painel').
  • O modo box nunca some sozinho: esqueceu de chamar SW.Pre.hide, o pedaço fica coberto para sempre.
  • A tela cheia espera todas as fotos e fontes. Em página pesada a pessoa espera demais — esconda antes com SW.Pre.hide('[sw-pre]') quando o essencial chegar.
  • Use só um de tela cheia por página, e no começo do <body>. Colocado no fim, a página aparece antes dele.
  • Sem nada dentro (sem .sw-spinner, pontinhos ou texto) aparece só o fundo liso — parece que a página travou.

O que ele não faz

  • Não mostra a porcentagem real do carregamento: o círculo e a barra só indicam "aguarde".
  • Quando a página foi aberta por uma transição de página do sw-trans, o de tela cheia é removido na hora (a transição já cumpre esse papel).