Voltar à galeria Destaque
Card de Produto Premium
Card de e-commerce com troca de foto no hover, seleção de tamanho e botão que confirma a adição à sacola.
ReactE-commerceMédio
Preview ao vivoInterativo
Carregando preview…
import { useState } from "react";
import "./styles.css";
const TAMANHOS = ["38", "39", "40", "41", "42"];
export default function App() {
const [tamanho, setTamanho] = useState("40");
const [estado, setEstado] = useState("idle");
function adicionar() {
if (estado !== "idle") return;
setEstado("adding");
setTimeout(function () { setEstado("added"); }, 700);
setTimeout(function () { setEstado("idle"); }, 3400);
}
return (
<div className="stage">
<article className="card">
<div className="foto">
<img
className="img principal"
src="https://picsum.photos/seed/runner-frente/620/620"
alt="Tênis Runner Pro visto de frente"
/>
<img
className="img alternativa"
src="https://picsum.photos/seed/runner-lado/620/620"
alt="Tênis Runner Pro visto de lado"
/>
<span className="selo">NOVO</span>
<span className="cashback">5% de cashback</span>
</div>
<div className="info">
<span className="marca">VELOX ORIGINALS</span>
<h3>Tênis Runner Pro Knit</h3>
<div className="avaliacao">
<span className="estrelas">★★★★★</span>
<em>4,9 (1.284)</em>
</div>
<div className="linha-tamanhos">
<span className="rotulo">Tamanho</span>
<div className="tamanhos">
{TAMANHOS.map(function (t) {
return (
<button
key={t}
className={t === tamanho ? "tam ativo" : "tam"}
onClick={function () { setTamanho(t); }}
>
{t}
</button>
);
})}
</div>
</div>
<div className="preco">
<div className="valores">
<s>R$ 499,90</s>
<strong>R$ 349,90</strong>
</div>
<span className="parcelas">ou 10x de R$ 34,99 sem juros</span>
</div>
<button className={"comprar " + estado} onClick={adicionar}>
{estado === "adding" && <span className="spinner" />}
{estado === "added" && <span className="check">✓</span>}
<span className="texto-botao">
{estado === "added" ? "Adicionado à sacola" : "Adicionar à sacola"}
</span>
</button>
</div>
</article>
</div>
);
}
Efeitos relacionados
carregando
Drawer lateral de sacola com stepper de quantidade animado e total atualizando com dígitos rolantes.
Mini-Sacola Deslizante
ReactDrawer lateral de sacola com stepper de quantidade animado e total atualizando com dígitos rolantes.
carregando
Clicar em comprar faz o produto voar em arco até o carrinho, que pulsa e incrementa o contador.
Produto Voando pro Carrinho
ReactClicar em comprar faz o produto voar em arco até o carrinho, que pulsa e incrementa o contador.
carregando
Fluxo de checkout com barra de progresso, etapas deslizando, resumo do pedido e confete na confirmação.
Checkout em 3 Passos
ReactFluxo de checkout com barra de progresso, etapas deslizando, resumo do pedido e confete na confirmação.
