● Lab 07 — UI Interativa

Drag, Flip, Observer
& Scroll Suave

Interações completas via atributos declarativos. Sem uma linha de JavaScript na sua página.

Parâmetros disponíveis

TagTipoDescriçãoExemplo
sm-dragstringTipo de arraste: x, y, xy, rotation"xy"
sm-drag-boundsstringLimite do arraste ("parent" ou seletor)"parent"
sm-drag-snapJSONPosições de encaixe ao soltar"[0,100,200]"
sm-drag-inertiapresençaFísica de inércia após soltar
sm-flippresençaAtiva o Flip Plugin ao clicar no elemento
sm-flip-classstringClasse CSS a alternar no flip"is-big"
sm-flip-targetseletorAlvo do flip (se diferente do elemento)"#grid"
sm-observerpresençaFullpage sections via Observer Plugin
sm-observer-typestringEventos detectados"wheel,touch"
sm-scroll-toseletorScroll suave ao clicar (ScrollToPlugin)"#secao"
sm-scroll-offsetnúmero (px)Offset vertical do destino"80"

sm-drag — Draggable

Qualquer elemento arrastável. Tipos: x, y, xy, rotation. Bounds opcionais.

↕↔

Drag livre (xy) com bounds

sm-drag="xy"
sm-drag-bounds="parent"

Drag só horizontal

sm-drag="x"
sm-drag-bounds="parent"

Drag rotation — girar

sm-drag="rotation"
SNAP

Drag com snap (encaixe)

sm-drag="x"
sm-drag-snap='{"x":[0,80,160,240,310]}'

sm-flip — Transição de Estado de Layout

Clique nos elementos abaixo. O Flip Plugin captura o estado antes e depois da mudança de CSS e anima a transição.

Clique!

Flip de tamanho — card expande

sm-flip
sm-flip-class="is-big"
sm-duration="0.6"
1
2
3
4
5
6

Flip de layout — grid para lista

sm-flip
sm-flip-class="is-list"
sm-flip-target="#cards-grid"

sm-scroll-to — Scroll Suave

Links e botões com scroll animado. Usa o ScrollToPlugin do GSAP.

Botões de navegação suave

<button sm-scroll-to="#secao"
sm-duration="1"
sm-ease="power3.out">
Ir para seção
</button>

sm-observer — Fullpage Sections

O Observer Plugin detecta wheel/touch e desliza entre seções. A área abaixo é um exemplo interativo — use o scroll dentro dela.

Seção 1 Role para baixo ↓
Seção 2 ↑ acima · abaixo ↓
Seção 3 ↑ Role para subir

Fullpage — 3 seções com deslize

<div sm-observer
sm-observer-type="wheel,touch">
<section sm-observer-section>1</section>
<section sm-observer-section>2</section>
<section sm-observer-section>3</section>
</div>

sm-drag — Avançado

Inércia, eixo Y, múltiplos draggables independentes e controle rotacional.

Drag com inércia — arraste rápido e solte

sm-drag="x"
sm-drag-inertia
sm-drag-bounds="parent"

Slider vertical — eixo Y

sm-drag="y"
sm-drag-bounds="parent"
A
B
C
D

Múltiplos draggables independentes

/* cada bolha tem seu próprio sm-drag */
sm-drag="xy" sm-drag-bounds="parent"
Arraste circular para girar

Dial / Knob — controle rotacional

sm-drag="rotation"

sm-flip — Avançado

O Flip Plugin captura o estado visual antes e depois de qualquer mudança de CSS e anima a transição. Clique nos elementos.

Produto Alfa
R$ 299
Clique para expandir
NovoStockPromo

Card de produto — compacto → expandido

sm-flip
sm-flip-class="prod-full"
sm-flip-target="#prod-card"
O que é sm-flip?
Captura o estado visual antes e depois de uma mudança de CSS e anima a transição via GSAP Flip Plugin.
Precisa de JavaScript?
Não. Com Smooll você só adiciona atributos HTML — toda a lógica de estado e animação é automática.
Funciona com qualquer CSS?
Sim. O Flip interpola entre qualquer diferença de tamanho, posição ou escala — basta definir os dois estados no CSS.

Accordion — cada item com sm-flip próprio

sm-flip sm-flip-class="acc-open"
sm-flip-target="#acc1"
4.2k
Visitantes hoje
Clique para detalhar
Direto1.8k
Orgânico1.4k
Social0.6k
Referência0.4k

Widget dashboard — número → tabela detalhada

sm-flip
sm-flip-class="dash-full"
sm-ease="back.out(1.2)"

sm-observer — Fullpage com 5 Seções

Conteúdo rico em cada seção — gradientes, ícones, badges, CTAs. Role com o mouse ou touch dentro da área.

🚀

Bem-vindo ao
Observer

Role com o mouse ou deslize no touch para navegar entre as 5 seções.

Performance
Declarativa

Zero JavaScript na página — só atributos HTML.

sm-observer sm-observer-section
🎛️

Controle
Total

Duração, ease e evento configuráveis.

sm-duration="0.85"
sm-ease="expo.inOut"
🎯

Landing Pages
Fullpage

Ideal para apresentações de produto, portfólios e propostas comerciais.

5 seções,
zero JS

Só Smooll.

5 seções fullpage — wheel + touch

sm-observer
sm-observer-type="wheel,touch"
sm-ease="expo.inOut"
sm-duration="0.85"

CSS OBRIGATÓRIO?

O Smooll injeta os estilos de comportamento mas não os estilos visuais. Três coisas precisam estar no seu CSS:

1. sm-drag — o elemento precisa ter position definido para bounds funcionar

Com sm-drag-bounds="parent", o elemento pai precisa ter position:relative e tamanho definido. O elemento arrastável precisa de position:absolute se usar bounds em container.

.container { position: relative; width: 100%; height: 200px; }
.drag-el { position: absolute; }

2. sm-flip — você precisa definir os dois estados CSS (antes e depois da classe)

O Flip captura a diferença de posição/tamanho entre o estado sem e com a classe CSS. Defina width, height, padding, etc. nos dois estados.

.meu-card { width: 120px; height: 80px; }
.meu-card.is-grande { width: 100%; height: 220px; }

3. sm-observer — o container precisa ter height definido (não pode ser auto)

O Observer usa position:absolute nas seções filhas dentro do container. O container precisa de altura explícita — height:100vh ou valor fixo.

[sm-observer] { height: 100vh; } /* já injetado pelo Smooll */
/* mas se estiver dentro de um demo, defina explicitamente */