SWCore
SWCore / Componentes / Text Carousel

Text Carousel Componentes

Frases que trocam no mesmo lugar — depoimentos, avisos, citações — com 9 efeitos de troca, setas, bolinhas e troca automática. <div sw-carousel sw-carousel-auto='4000'>.

O que é

É aquela área do site onde os depoimentos de clientes vão se revezando: "Atendimento nota 10!" some e entra "Chegou antes do prazo". Serve para qualquer bloco curto de texto que você quer mostrar um de cada vez, no mesmo espaço: depoimentos, frases da marca, avisos da loja ("Frete grátis acima de R$ 199"), números de destaque. Você escreve os blocos dentro de sw-carousel-trk, e escolhe como eles trocam (sw-carousel-effect), se trocam sozinhos (sw-carousel-auto) e a velocidade (sw-carousel-dur). Para fotos passando, o componente certo é o Slider.

O JavaScript do núcleo mostra o bloco que tem is-act (ou o primeiro, se nenhum tiver) e esconde os outros. Ao trocar, o bloco que sai e o que entra fazem o efeito escolhido ao mesmo tempo. As setas sw-carousel-prv/sw-carousel-nxt e as bolinhas (que ele desenha sozinho dentro de sw-carousel-dts) são opcionais. Também dá para trocar arrastando com o dedo ou o mouse. Com troca automática, ele pausa enquanto o mouse está em cima. Funciona no tema claro e no escuro.

Quando usar

  • Depoimentos de clientes na página inicial ou de vendas.
  • Faixa de avisos no topo da loja: frete grátis, cupom, prazo de entrega.
  • Frases de impacto ou números ("+500 clientes", "10 anos de mercado") se revezando.
  • Não use para informação que a pessoa precisa ler (preço, prazo legal): quem passa rápido pode não ver.

Comece aqui

  1. 1

    Coloque o SWCore na página: CSS no <head> e JS no fim do <body>. O segundo CSS traz os ícones das setas.

    <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.compl.min.css">
    
    <!-- fim do <body> -->
    <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script>
  2. 2

    Coloque os blocos dentro de sw-carousel-trk, as setas e o lugar das bolinhas (vazio). Com sw-carousel-auto="4000" troca sozinho a cada 4 segundos.

    "Cortaram meu cabelo do jeito que eu pedi. Recomendo!" — Lucas

    "Ambiente top e café de cortesia." — Rafael

    "Marquei pelo WhatsApp e fui atendido na hora." — Diego

    <div sw-carousel sw-carousel-auto="4000">
      <div sw-carousel-trk>
        <p class="is-act">"Cortaram meu cabelo do jeito que eu pedi. Recomendo!" — Lucas</p>
        <p>"Ambiente top e café de cortesia." — Rafael</p>
        <p>"Marquei pelo WhatsApp e fui atendido na hora." — Diego</p>
      </div>
      <button type="button" sw-carousel-prv aria-label="Anterior"><i class="swi-chevron-left"></i></button>
      <div sw-carousel-dts></div>
      <button type="button" sw-carousel-nxt aria-label="Próximo"><i class="swi-chevron-right"></i></button>
    </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. Efeitos de troca

sw-carousel-effect escolhe como um bloco dá lugar ao outro. Sem ele: fade. Todos os quadros abaixo trocam sozinhos a cada 2,5 s (sw-carousel-auto="2500") — ou clique nas setas.

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

fade — some e aparece (padrão) <div sw-carousel sw-carousel-effect="fade" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

slide-left — entra pela direita <div sw-carousel sw-carousel-effect="slide-left" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

slide-right — entra pela esquerda <div sw-carousel sw-carousel-effect="slide-right" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

slide-up — sobe de baixo <div sw-carousel sw-carousel-effect="slide-up" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

slide-down — desce de cima <div sw-carousel sw-carousel-effect="slide-down" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

zoom-in — cresce ao entrar <div sw-carousel sw-carousel-effect="zoom-in" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

zoom-out — encolhe ao entrar <div sw-carousel sw-carousel-effect="zoom-out" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

bounce — entra quicando <div sw-carousel sw-carousel-effect="bounce" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

flip — vira como carta <div sw-carousel sw-carousel-effect="flip" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

2. Velocidade e repetição

sw-carousel-dur é quanto dura a troca, em milissegundos (padrão 600). sw-carousel-auto é o tempo entre uma troca e outra (sem ele, só troca clicando). sw-carousel-loop="false" para no último bloco em vez de voltar ao primeiro.

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

Troca lenta — sw-carousel-dur="1500" <div sw-carousel sw-carousel-effect="fade" sw-carousel-dur="1500" sw-carousel-auto="3500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

Troca rápida — sw-carousel-dur="250" <div sw-carousel sw-carousel-effect="slide-left" sw-carousel-dur="250" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

Só na seta (sem auto) <div sw-carousel sw-carousel-effect="slide-left"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

Para no fim — sw-carousel-loop="false" <div sw-carousel sw-carousel-effect="slide-left" sw-carousel-loop="false"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p>"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

3. Controles opcionais

Setas e bolinhas são opcionais: tire as que não quiser. Sem nenhuma, use sw-carousel-auto (ou arraste com o dedo/mouse).

Frete grátis acima de R$ 199

Cupom BEMVINDO10 na 1ª compra

Troca grátis em 30 dias

Só bolinhas <div sw-carousel sw-carousel-auto="3000"> <div sw-carousel-trk> <p class="is-act">Frete grátis acima de R$ 199</p> <p>Cupom BEMVINDO10 na 1ª compra</p> <p>Troca grátis em 30 dias</p> </div> <div sw-carousel-dts></div> </div>

Frete grátis acima de R$ 199

Cupom BEMVINDO10 na 1ª compra

Troca grátis em 30 dias

Só setas <div sw-carousel sw-carousel-effect="slide-left"> <div sw-carousel-trk> <p class="is-act">Frete grátis acima de R$ 199</p> <p>Cupom BEMVINDO10 na 1ª compra</p> <p>Troca grátis em 30 dias</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

+500 clientes

10 anos de mercado

Nota 4,9 no Google

Sem controles, só automático <div sw-carousel sw-carousel-effect="slide-up" sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">+500 clientes</p> <p>10 anos de mercado</p> <p>Nota 4,9 no Google</p> </div> </div>

4. Efeito diferente em cada bloco

Coloque sw-carousel-effect num bloco para ele entrar com outro efeito — vale só na vez dele.

"Atendimento nota 10!"

"Chegou antes do prazo."

"Voltarei com certeza."

Um bloco com flip, os outros com fade <div sw-carousel sw-carousel-auto="2500"> <div sw-carousel-trk> <p class="is-act">"Atendimento nota 10!"</p> <p sw-carousel-effect="flip">"Chegou antes do prazo."</p> <p>"Voltarei com certeza."</p> </div> <button type="button" sw-carousel-prv aria-label="Anterior"> <i class="swi-chevron-left"></i> </button> <div sw-carousel-dts></div> <button type="button" sw-carousel-nxt aria-label="Próximo"> <i class="swi-chevron-right"></i> </button> </div>

Tabela de opções

PalavraO que fazExemplo
Peças
sw-carouselA caixa do carrossel.<div sw-carousel>
sw-carousel-trkA pista: cada filho direto dela é um bloco.<div sw-carousel-trk>
sw-carousel-prv / sw-carousel-nxtBotões de anterior / próximo (opcionais).<button sw-carousel-prv>
sw-carousel-dtsLugar das bolinhas — deixe vazio, o JS desenha (opcional).<div sw-carousel-dts></div>
is-actClasse do bloco visível. Escreva no bloco que deve aparecer primeiro — o carrossel começa por ele (sem nenhum, começa pelo primeiro).<p class="is-act">
Efeito — sw-carousel-effect
fadeSome e aparece. Padrão.sw-carousel-effect="fade"
slide-left / slide-rightDesliza na horizontal.sw-carousel-effect="slide-left"
slide-up / slide-downDesliza na vertical.sw-carousel-effect="slide-up"
zoom-in / zoom-outTroca crescendo / encolhendo.sw-carousel-effect="zoom-in"
bounceEntra quicando.sw-carousel-effect="bounce"
flipVira como carta (3D).sw-carousel-effect="flip"
(num bloco)O mesmo atributo num bloco muda o efeito só na entrada dele.<p sw-carousel-effect="flip">
Tempo
sw-carousel-autoTroca sozinho a cada N ms; pausa com o mouse em cima. Sem ele, só troca pelo clique/arraste.sw-carousel-auto="4000"
sw-carousel-durDuração da troca em ms. Padrão 600.sw-carousel-dur="900"
sw-carousel-loopfalse para no último (e não volta do primeiro para o último). Padrão: repete.sw-carousel-loop="false"

Receitas prontas — usos reais

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

Depoimentos com nome e estrelas (página de vendas) Ao vivo

"Meu site ficou pronto em uma semana e já chegaram três orçamentos pelo WhatsApp."

Juliana Prado · Doceria da Ju · ★★★★★

"O painel é tão fácil que eu mesmo troco as fotos dos pratos."

Marcos Lima · Restaurante Sabor Mineiro · ★★★★★

"Suporte rápido e sem enrolação."

Fernanda Reis · Clínica Vida · ★★★★★
<div sw-carousel sw-carousel-effect="slide-left" sw-carousel-auto="5000">
  <div sw-carousel-trk>
    <blockquote class="is-act">
      <p>"Meu site ficou pronto em uma semana e já chegaram três orçamentos pelo WhatsApp."</p>
      <footer><strong>Juliana Prado</strong> · Doceria da Ju · ★★★★★</footer>
    </blockquote>
    <blockquote>
      <p>"O painel é tão fácil que eu mesmo troco as fotos dos pratos."</p>
      <footer><strong>Marcos Lima</strong> · Restaurante Sabor Mineiro · ★★★★★</footer>
    </blockquote>
    <blockquote>
      <p>"Suporte rápido e sem enrolação."</p>
      <footer><strong>Fernanda Reis</strong> · Clínica Vida · ★★★★★</footer>
    </blockquote>
  </div>
  <button type="button" sw-carousel-prv aria-label="Anterior"><i class="swi-chevron-left"></i></button>
  <div sw-carousel-dts></div>
  <button type="button" sw-carousel-nxt aria-label="Próximo"><i class="swi-chevron-right"></i></button>
</div>
Faixa de avisos no topo da loja Ao vivo

Frete grátis acima de R$ 199

Cupom BEMVINDO10 na primeira compra

Até 6x sem juros no cartão

<div sw-carousel sw-carousel-effect="slide-up" sw-carousel-auto="3000" class="bg-sur t-ct">
  <div sw-carousel-trk>
    <p class="is-act"><i class="swi-package"></i> Frete grátis acima de R$ 199</p>
    <p><i class="swi-tag"></i> Cupom <strong>BEMVINDO10</strong> na primeira compra</p>
    <p><i class="swi-credit-card"></i> Até 6x sem juros no cartão</p>
  </div>
</div>
Controlar por botões seus (JavaScript) Ao vivo

Passo 1 — Escolha o serviço

Passo 2 — Escolha o horário

Passo 3 — Confirme pelo WhatsApp

<div sw-carousel id="passos" sw-carousel-effect="zoom-in">
  <div sw-carousel-trk>
    <p class="is-act">Passo 1 — Escolha o serviço</p>
    <p>Passo 2 — Escolha o horário</p>
    <p>Passo 3 — Confirme pelo WhatsApp</p>
  </div>
  <div sw-carousel-dts></div>
</div>

<script>
  const passos = document.getElementById('passos');
  SW.Carousel.next(passos);       // próximo
  SW.Carousel.prev(passos);       // anterior
  SW.Carousel.goTo(passos, 0);    // vai direto para o 1º (conta a partir de 0)
</script>
Reagir à troca (evento) Referência
document.getElementById('passos').addEventListener('sw:carousel:change', (e) => {
  // e.detail.index = posição do bloco que entrou (0, 1, 2…)
  document.getElementById('contador').textContent = (e.detail.index + 1) + ' de 3';
});

Eventos

sw:carousel:change
Disparado na caixa [sw-carousel] quando um bloco começa a entrar. e.detail.index = posição do novo bloco (começa em 0).

API (JavaScript)

SW.Carousel.next(el)
Próximo bloco.
SW.Carousel.prev(el)
Bloco anterior.
SW.Carousel.goTo(el, i)
Vai para o bloco de posição i (0 = primeiro).
SW.Carousel.pause(el)
Para a troca automática.
SW.Carousel.resume(el)
Volta a troca automática (só se tiver sw-carousel-auto).
SW.Carousel.initAll(raiz)
Liga os [sw-carousel] dentro de raiz. O núcleo já faz sozinho.

Precisa de quê

  • swcore.min.css + swcore.min.js.
  • swcore.compl.min.css — só se usar ícones swi-* nas setas (pode usar ‹ › de texto no lugar).

Cuidados — erros comuns

  • Esquecer o sw-carousel-trk em volta dos blocos: sem ele nada troca.
  • is-act em mais de um bloco: vale o primeiro deles.
  • Blocos com alturas bem diferentes: a caixa muda de altura a cada troca e a página "pula". Deixe os textos com tamanho parecido.
  • Troca automática rápida demais (sw-carousel-auto="1500") em texto longo: ninguém consegue ler. Dê pelo menos 4000 ms para depoimentos.
  • Colocar fotos grandes: funciona, mas o Slider é feito para isso.

O que ele não faz

  • Não troca pelas setas do teclado.
  • Um bloco por vez (não mostra 3 lado a lado).
  • Não pausa sozinho quando a aba fica escondida nem quando a pessoa está usando leitor de tela.