SWCore
SWCore / Animações / Transição de página

Transição de página Animações

Tira o "piscar branco" entre uma página e outra: uma cortina cobre a tela, a próxima página carrega por trás e a cortina sai. sw-ani-page="wipe" no link.

O que é

Quando a pessoa clica num link do seu site, em vez do corte seco (tela branca, página nova aparecendo aos pedaços), uma cortina animada cobre a tela com um "carregando" (e a sua logo, se quiser). Enquanto isso a próxima página já é baixada. Ao abrir a página nova, a cortina sai com o efeito de entrada. São 17 efeitos: varrer, desbotar, círculo, diagonal, onda, deslizar, girar, desfocar…

Você coloca sw-ani-page nos links internos, com o efeito de saída|entrada (ex.: wipe|fade = cobre varrendo, revela desbotando; um nome só vale para os dois). Ao passar o mouse no link, o SWCore já pede a página para o navegador ir adiantando. Ctrl+clique, "abrir em nova aba" e links de download continuam normais. A página de destino também precisa ter o SWCore com o pacote de animação, para fazer a cortina sair.

Quando usar

  • Site institucional, portfólio, landing com várias páginas: a navegação fica com cara de aplicativo.
  • Site com a marca forte: a cortina na cor da marca e a logo no meio viram assinatura visual.
  • Evite em sistema/painel com muita navegação rápida: a cortina acrescenta cerca de 1 segundo a cada clique.

Comece aqui

  1. 1

    Coloque o SWCore e o pacote de animação em todas as páginas (o swcore.motion.min.js vem antes do swcore.min.js).

    <!-- no <head> -->
    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css">
    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.motion.min.css">
    
    <!-- no fim do <body>: o motion ANTES do swcore -->
    <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.motion.min.js"></script>
    <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script>
  2. 2

    Coloque sw-ani-page e o efeito no link. Aqui, um botão que só simula (clique para ver a cortina — você não sai desta página):

    <a href="/servicos" sw-ani-page="wipe">Serviços</a>

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. Cortinas com forma

Clique em cada botão: ele toca a cortina de verdade, cobrindo esta página, e sai. No seu site o mesmo atributo vai no link (<a href>) e aí sim a página troca por trás. Botões e links com href="#" sempre só simulam.

wipe <a href="/servicos" sw-ani-page="wipe">Serviços</a>
fade <a href="/servicos" sw-ani-page="fade">Serviços</a>
curtain <a href="/servicos" sw-ani-page="curtain">Serviços</a>
circle <a href="/servicos" sw-ani-page="circle">Serviços</a>
diagonal <a href="/servicos" sw-ani-page="diagonal">Serviços</a>
wave <a href="/servicos" sw-ani-page="wave">Serviços</a>

2. Deslizar

A cortina entra por um lado e sai pelo outro. slide sozinho é o mesmo que slide-left.

slide-left <a href="/servicos" sw-ani-page="slide-left">Serviços</a>
slide-right <a href="/servicos" sw-ani-page="slide-right">Serviços</a>
slide-up <a href="/servicos" sw-ani-page="slide-up">Serviços</a>
slide-down <a href="/servicos" sw-ani-page="slide-down">Serviços</a>

3. Crescer, girar e desfocar

scale = scale-up. blur, blur-in e blur-out são o mesmo efeito com três nomes.

scale <a href="/servicos" sw-ani-page="scale">Serviços</a>
scale-down <a href="/servicos" sw-ani-page="scale-down">Serviços</a>
flip <a href="/servicos" sw-ani-page="flip">Serviços</a>
flip-x <a href="/servicos" sw-ani-page="flip-x">Serviços</a>
blur <a href="/servicos" sw-ani-page="blur">Serviços</a>

4. Saída diferente da entrada (saída|entrada)

O primeiro nome é como a cortina cobre a página atual; o segundo, como ela sai revelando a página nova.

wipe|fade <a href="/servicos" sw-ani-page="wipe|fade">Serviços</a>
circle|curtain <a href="/servicos" sw-ani-page="circle|curtain">Serviços</a>
slide-up|scale-down <a href="/servicos" sw-ani-page="slide-up|scale-down">Serviços</a>

5. Foto no lugar da cor (sw-ani-page-bg)

Em vez da cor lisa, a cortina mostra uma foto (com um véu escuro por cima para o "carregando" aparecer). Funciona em todos os efeitos, inclusive na onda.

wipe <a href="/servicos" sw-ani-page="wipe" sw-ani-page-bg="https://picsum.photos/id/1015/1200/800">Serviços</a>
wave <a href="/servicos" sw-ani-page="wave" sw-ani-page-bg="https://picsum.photos/id/1015/1200/800">Serviços</a>

Tabela de opções

PalavraO que fazExemplo
No link
sw-ani-pageLiga a transição neste link (ou botão). Valor: efeito ou saída|entrada. Sem valor ou nome errado: wipe.<a href="/sobre" sw-ani-page="wipe|fade">
sw-ani-page-bgFoto na cortina, no lugar da cor.sw-ani-page-bg="/img/cortina.jpg"
data-sw-previewNum link de verdade: só simula a cortina, sem sair da página.<a href="/sobre" sw-ani-page="wipe" data-sw-preview>
Efeitos com forma
wipeCobre de baixo para cima e sai para cima.sw-ani-page="wipe"
fadeAparece e some desbotando.sw-ani-page="fade"
curtainAbre do centro para os lados; sai fechando no meio.sw-ani-page="curtain"
circleCírculo crescendo do centro; sai encolhendo.sw-ani-page="circle"
diagonalFaixa inclinada varrendo da esquerda para a direita.sw-ani-page="diagonal"
waveBorda ondulada subindo.sw-ani-page="wave"
Efeitos de deslizar
slide-left (ou slide)Entra pela esquerda, sai pela direita.sw-ani-page="slide-left"
slide-rightEntra pela direita, sai pela esquerda.sw-ani-page="slide-right"
slide-upEntra por baixo, sai por cima.sw-ani-page="slide-up"
slide-downEntra por cima, sai por baixo.sw-ani-page="slide-down"
Efeitos de escala, giro e desfoque
scale (ou scale-up)Cresce do centro; sai crescendo e sumindo.sw-ani-page="scale"
scale-downVem grande e encolhe até cobrir; sai encolhendo.sw-ani-page="scale-down"
flipGira como uma porta (eixo vertical).sw-ani-page="flip"
flip-xGira como uma persiana (eixo horizontal).sw-ani-page="flip-x"
blur (ou blur-in, blur-out)Desfocado, entra nítido, sai desfocando.sw-ani-page="blur"
No seu CSS / HTML
--sw-page-bgCor da cortina. Padrão: a cor primária do site.:root { --sw-page-bg: #0f172a; }
<template id="sw-page-loader">Sua logo no meio da cortina, acima do "carregando" (ela fica branca automaticamente).<template id="sw-page-loader"><img src="/logo.svg" alt=""></template>

Receitas prontas — usos reais

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

Transição em todos os links internos do site (é o que esta documentação usa) Referência
<!-- no fim do <body>, ANTES do swcore.motion.min.js -->
<script>
  document.querySelectorAll('a[href]').forEach(function (link) {
    var href = link.getAttribute('href') || '';
    if (href.startsWith('#') || link.hasAttribute('download') || link.target) return;
    if (new URL(link.href, location.href).origin === location.origin) {
      link.setAttribute('sw-ani-page', link.getAttribute('sw-ani-page') || 'fade|fade');
    }
  });
</script>
Logo da empresa e cor da marca na cortina Referência
<style>
  :root { --sw-page-bg: #0f172a; }   /* cor da cortina */
</style>

<!-- em qualquer lugar do <body> -->
<template id="sw-page-loader">
  <img src="/img/logo.svg" alt="">
</template>

<nav>
  <a href="/" sw-ani-page="curtain|fade">Início</a>
  <a href="/servicos" sw-ani-page="curtain|fade">Serviços</a>
  <a href="/contato" sw-ani-page="curtain|fade">Contato</a>
</nav>
Sem "piscar" a página nova antes da cortina Referência
<!-- Já vem pronto: o swcore.motion.min.js cobre a página nova assim que é lido
     e o swcore.motion.min.css esconde o resto enquanto isso. Não precisa escrever nada.

     Página MUITO grande (muito HTML antes dos scripts do fim do <body>)?
     Para garantia total, antecipe só a classe, no <head>: -->
<script>
  try { if (sessionStorage.getItem('sw-page-effect')) document.documentElement.classList.add('sw-page-pending'); } catch (e) {}
</script>
<!-- ATENÇÃO: esse script do <head> só em páginas que carregam o swcore.motion.min.js
     — é ele que tira a classe (sem ele a página ficaria invisível). -->
Tocar a cortina pelo JavaScript (sem trocar de página) Ao vivo
<button type="button" sw-btn="suc" id="salvar">Salvar</button>

<script>
  document.getElementById('salvar').addEventListener('click', async () => {
    await SWMotion.transition('circle|fade');   // cobre e sai
    // aqui a cortina já saiu
  });
</script>

API (JavaScript)

SWMotion.transition("saída|entrada")
Toca só a cortina (cobre e sai) na página atual, sem navegar. Devolve uma Promise que termina quando a cortina já saiu (~1,8 s). Mostra o "Carregando" (e a sua logo) enquanto cobre, aceita todos os efeitos (inclusive wave) e, no 2º argumento, uma imagem de fundo: SWMotion.transition("wave", "/foto.jpg"). Nome errado vira wipe.
SWMotion.refresh()
Reinicia as animações e liga a transição em links com sw-ani-page que entraram na página depois do carregamento.

Precisa de quê

  • swcore.motion.min.js e swcore.motion.min.css em todas as páginas (a de origem cobre, a de destino revela).
  • Links para páginas do mesmo site.

Cuidados — erros comuns

  • Link para outro site (Instagram, WhatsApp, outro domínio) com sw-ani-page abre normal, sem cortina: a transição só existe entre páginas do mesmo site.
  • A página de destino sem o pacote de animação fica "presa" atrás de nada: a cortina some junto com a página antiga e a nova aparece seca. Coloque o SWCore em todas.
  • <button> com sw-ani-page nunca navega, só simula. Para trocar de página use <a href>.
  • Link com target="_blank" ou download ignora a transição (e isso é o certo).
  • Nome de efeito errado não dá erro: vira wipe.

O que ele não faz

  • Acrescenta perto de 1 segundo por navegação (cobrir + carregar + sair).
  • Não funciona com o botão "voltar" do navegador: a página anterior aparece sem cortina.
  • O texto "Carregando" é fixo, em português.