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
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
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
Para cobrir só um pedaço, acrescente
box. Ele ocupa o elemento pai inteiro (aqui, esta caixa):Pedidos de hojeCarregando 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.
<div sw-pre="box"><div class="sw-spinner"></div></div>
<div sw-pre="box drk"><div class="sw-spinner"></div></div>
<div sw-pre="box pri"><div class="sw-spinner"></div></div>
<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.
<div sw-pre="box"><div class="sw-spinner"></div></div>
<div sw-pre="box"><div class="sw-pre-dots"><span></span><span></span><span></span></div></div>
<div sw-pre="box"><div class="sw-spinner"></div><span class="sw-pre-lbl">Preparando seu pedido…</span></div>
<div sw-pre="box" sw-pre-logo="/img/logo.webp">
<div class="sw-pre-dots"><span></span><span></span><span></span></div>
</div>
<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.
<div sw-pre="box bar"></div>
<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.
Setembro: 128 pedidos · R$ 18.430
<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
| Palavra | O que faz | Exemplo |
|---|---|---|
| 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> |
box | Cobre só o elemento pai (o SW Core acerta o posicionamento do pai sozinho). Não some sozinho. | sw-pre="box" |
drk | Fundo escuro. | sw-pre="drk" |
pri | Fundo na cor primária; círculo, pontinhos e texto ficam brancos. | sw-pre="pri" |
bar | Barrinha correndo no topo, fundo transparente. | sw-pre="bar" |
| Extras | ||
sw-pre-bg | Fundo livre: cor, degradê ou url(…) de uma imagem. | sw-pre-bg="#0f172a" |
sw-pre-logo | Endereç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-spinner | Círculo girando. | <div class="sw-spinner"></div> |
.sw-pre-dots | Três pontinhos pulsando (coloque 3 <span> dentro). | <div class="sw-pre-dots"><span></span><span></span><span></span></div> |
.sw-pre-lbl | Texto 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.
<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) -->
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>
<!-- 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>
<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)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 })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.csseswcore.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
boxnunca some sozinho: esqueceu de chamarSW.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).

