Empilha seções inteiras da página e faz uma cobrir/substituir a outra (ou deslizar na horizontal) conforme o scroll, em vez do fluxo normal de rolagem.
Pra páginas com poucas seções grandes e muito visuais (apresentações, cases, produtos únicos) — cada seção ocupa a tela toda e a transição pra próxima é uma animação inteira (cobrir, deslizar, dissolver, girar, dobrar), não um scroll comum.
Detecta seções filhas (data-sw-section) e monta uma timeline única presa à tela, cobrindo seções × 100% de distância. data-sw-fx escolhe o efeito de transição entre cada par de seções (pode listar um efeito por seção separado por |). Em telas pequenas, cai automaticamente pro fluxo normal (empilhado, sem prender scroll) se data-sw-mobile="flow" estiver presente.
Essa seção prende a tela de verdade e se solta da moldura enquanto você rola — role bem devagar pra ver o efeito.
Base
Ela não sai — só fica coberta quando a próxima chega.
stack
Ao voltar o scroll, ela desce novamente — reversível.
stack
Mesmo efeito de novo — todas as cenas empilham na mesma pilha.
<div data-sw="sections" data-sw-fx="stack">
<section data-sw-section>Cena 01</section>
<section data-sw-section>Cena 02</section>
<section data-sw-section>Cena 03</section>
</div>
<!-- um valor só = todas as transições reais usam esse mesmo efeito -->
Essa seção prende a tela de verdade e se solta da moldura enquanto você rola — role bem devagar pra ver o efeito.
Base
A primeira nunca anima — ela já começa visível.
zoom
O 2º nome do pipe (não o 1º) controla essa entrada.
fold
Se faltarem nomes no pipe, o último se repete.
<div data-sw="sections" data-sw-fx="slide-up|zoom|fold">
<section data-sw-section>Começo</section>
<section data-sw-section>Aproxima</section>
<section data-sw-section>Desdobra</section>
</div>
<!-- separe os nomes com | — cada posição corresponde a uma section (a 1ª nunca anima, é a base) -->
Essa seção prende a tela de verdade e se solta da moldura enquanto você rola — role bem devagar pra ver o efeito.
Direções
Direção conta história: continuidade, oposição, subida ou queda.
slide-right
A anterior sai pela esquerda.
slide-left
Sentido invertido do anterior.
slide-down
Entra de cima pra baixo.
slide-up
Entra de baixo pra cima.
<div data-sw="sections" data-sw-fx="stack|slide-right|slide-left|slide-down|slide-up">
<section data-sw-section>Cena base</section>
<section data-sw-section>Direita</section>
<section data-sw-section>Esquerda</section>
<section data-sw-section>Desce</section>
<section data-sw-section>Sobe</section>
</div>
Essa seção prende a tela de verdade e se solta da moldura enquanto você rola — role bem devagar pra ver o efeito.
Observe
Role bem devagar entre elas.
fade
De 0 a 1 aos poucos — ao subir o scroll, fica transparente de novo.
mask
Um clip-path circular cresce do centro até cobrir a tela.
skew
Como uma cortina em diagonal, sem deformar o texto.
fold
Efeito de dobra, como um mapa se abrindo.
<div data-sw="sections" data-sw-fx="stack|fade|mask|skew|fold">
<section data-sw-section>Cena base</section>
<section data-sw-section>Aparecer com fade</section>
<section data-sw-section>Revelar com mask</section>
<section data-sw-section>Inclinar com skew</section>
<section data-sw-section>Dobrar com fold</section>
</div>
Essa seção prende a tela de verdade e se solta da moldura enquanto você rola — role bem devagar pra ver o efeito.
Trilho
Todas as seções ficam lado a lado, deslizando juntas.
Trilho
Cada seção some pra esquerda conforme a próxima chega.
Trilho
Depois da última seção, o scroll libera de novo.
<div data-sw="sections" data-sw-fx="h-scroll">
<section data-sw-section>Seção 1</section>
<section data-sw-section>Seção 2</section>
<section data-sw-section>Seção 3</section>
</div>
Essa seção prende a tela de verdade e se solta da moldura enquanto você rola — role bem devagar pra ver o efeito.
zoom
No celular, esse efeito nem entra — some empilhado, scroll normal.
zoom
data-sw-mobile="flow" evita prender o scroll em telas pequenas.
<div data-sw="sections" data-sw-fx="zoom" data-sw-mobile="flow">
<section data-sw-section>Seção 1</section>
<section data-sw-section>Seção 2</section>
</div>
<!-- data-sw-mobile="flow" some até 767px de largura: some empilhado, scroll normal -->
Essa seção prende a tela de verdade e se solta da moldura enquanto você rola — role bem devagar pra ver o efeito.
Abertura
Ao rolar, a Section 2 entra cobrindo esta tela.
Conclusão
A página continuou seu fluxo normal após a passagem do conteúdo grande.
<div data-sw="sections" data-sw-fx="cover">
<!-- Section 1 Normal -->
<section data-sw-section class="h-screen flex items-center justify-center">
<h2>Section 1: Abertura</h2>
</section>
<!-- Section 2: Conteúdo Longo (data-sw-scroll + data-sw-h="300%") -->
<section data-sw-section data-sw-h="300%" class="relative h-screen overflow-hidden">
<!-- Imagem de fundo que fica presa -->
<div class="absolute inset-0 z-0">
<img src="fundo.webp" class="w-full h-full object-cover" alt="Fundo">
</div>
<!-- Container com todo o conteúdo longo que sobe pelo scroll -->
<div data-sw-scroll class="relative z-10 max-w-2xl mx-auto py-16 px-6 space-y-8 text-white">
<div class="p-6 rounded-lg bg-black/60 backdrop-blur">
<h3>1. Começo do conteúdo</h3>
<p>A tela fica travada na Section 2 enquanto você rola o mouse.</p>
</div>
<div class="p-6 rounded-lg bg-black/60 backdrop-blur">
<h3>2. Meio do conteúdo</h3>
<p>Todo o texto longo passa suavemente sem cortar.</p>
</div>
<div class="p-6 rounded-lg bg-black/60 backdrop-blur">
<h3>3. Fim do conteúdo</h3>
<p>Ao terminar o último bloco, o scroll avança para a Section 3!</p>
</div>
</div>
</section>
<!-- Section 3 Normal: Continuação -->
<section data-sw-section class="h-screen flex items-center justify-center">
<h2>Section 3: A Jornada Continua</h2>
</section>
</div>
data-sw="sections"data-sw-section (nos filhos)data-sw-fx| se quiser um diferente por seçãodata-sw-mobile="flow"data-sw-scrubstack / coverslide-up / slide-down / slide-left / slide-rightfadezoom / scalemaskskewfoldh-scroll / h-scroll-rightNenhum.
Nenhum.
gsap-bundle.js (GSAP com ScrollTrigger já incluso). O JS e o CSS do Motion já vêm dentro de swcore.js/swcore.css, sem arquivo extra do SWCore.data-sw-section.