Pular para o conteúdo

Carousel

Carrossel de conteúdo rotativo com controles de navegação, indicadores e suporte para autoplay.

import { Carousel } from 'asterui'

Carrossel Básico

Carrossel simples com controles de navegação e indicadores.

import { Carousel } from 'asterui'

function App() {
  return (
      <Carousel className="w-full max-w-md h-48">
        <Carousel.Item>
          <img src="https://picsum.photos/seed/1/400/200" alt="Slide 1" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/2/400/200" alt="Slide 2" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/3/400/200" alt="Slide 3" className="w-full h-full object-cover" />
        </Carousel.Item>
      </Carousel>
    )
}

export default App

Autoplay

Carrossel com avanço automático de slides. Pausa ao passar o mouse.

import { Carousel } from 'asterui'

function App() {
  return (
      <Carousel autoplay autoplaySpeed={2000} className="w-full max-w-md h-48">
        <Carousel.Item>
          <img src="https://picsum.photos/seed/1/400/200" alt="Slide 1" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/2/400/200" alt="Slide 2" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/3/400/200" alt="Slide 3" className="w-full h-full object-cover" />
        </Carousel.Item>
      </Carousel>
    )
}

export default App

Efeito Fade

Carrossel com transição de fade em vez de deslizamento.

import { Carousel } from 'asterui'

function App() {
  return (
      <Carousel effect="fade" autoplay autoplaySpeed={3000} className="w-full max-w-md h-48">
        <Carousel.Item>
          <img src="https://picsum.photos/seed/10/400/200" alt="Slide 1" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/11/400/200" alt="Slide 2" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/12/400/200" alt="Slide 3" className="w-full h-full object-cover" />
        </Carousel.Item>
      </Carousel>
    )
}

export default App

Carrossel Vertical

Carrossel com orientação vertical.

import { Carousel } from 'asterui'

function App() {
  return (
      <Carousel vertical className="h-48 w-full max-w-md">
        <Carousel.Item>
          <img src="https://picsum.photos/seed/4/400/200" alt="Slide 1" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/5/400/200" alt="Slide 2" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/6/400/200" alt="Slide 3" className="w-full h-full object-cover" />
        </Carousel.Item>
      </Carousel>
    )
}

export default App

Sem Setas

Carrossel com setas ocultas, navegação apenas por pontos.

import { Carousel } from 'asterui'

function App() {
  return (
      <Carousel arrows={false} className="w-full max-w-md h-48">
        <Carousel.Item>
          <img src="https://picsum.photos/seed/7/400/200" alt="Slide 1" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/8/400/200" alt="Slide 2" className="w-full h-full object-cover" />
        </Carousel.Item>
        <Carousel.Item>
          <img src="https://picsum.photos/seed/9/400/200" alt="Slide 3" className="w-full h-full object-cover" />
        </Carousel.Item>
      </Carousel>
    )
}

export default App

Posicionamento de Pontos

Posicionar pontos indicadores em diferentes locais.

import { Carousel, Space } from 'asterui'

function App() {
  return (
      <Space direction="vertical" size="lg" className="w-full">
        <Carousel dotPlacement="top" className="w-full max-w-md h-32">
          <Carousel.Item>
            <div className="bg-info text-info-content h-full flex items-center justify-center">Top Dots</div>
          </Carousel.Item>
          <Carousel.Item>
            <div className="bg-success text-success-content h-full flex items-center justify-center">Slide 2</div>
          </Carousel.Item>
        </Carousel>
        <Carousel dotPlacement="start" arrows={false} className="w-full max-w-md h-32">
          <Carousel.Item>
            <div className="bg-warning text-warning-content h-full flex items-center justify-center">Start Dots</div>
          </Carousel.Item>
          <Carousel.Item>
            <div className="bg-error text-error-content h-full flex items-center justify-center">Slide 2</div>
          </Carousel.Item>
        </Carousel>
      </Space>
    )
}

export default App

Conteúdo Personalizado

Carrossel com conteúdo de slide personalizado como cards.

import { Carousel, Card, Button } from 'asterui'

function App() {
  return (
      <Carousel className="w-full max-w-md">
        <Carousel.Item>
          <Card title="Feature 1" className="bg-base-200 h-full">
            <p>Discover amazing features</p>
            <Button color="primary" size="sm">Learn More</Button>
          </Card>
        </Carousel.Item>
        <Carousel.Item>
          <Card title="Feature 2" className="bg-base-200 h-full">
            <p>Powerful and flexible</p>
            <Button color="secondary" size="sm">Explore</Button>
          </Card>
        </Carousel.Item>
      </Carousel>
    )
}

export default App
PropriedadeDescriçãoTipoPadrão
childrenSlides do carrossel (componentes Carousel.Item)ReactNode-
activeIndexÍndice do slide atual (modo controlado)number-
defaultActiveIndexÍndice do slide padrão (modo não controlado)number0
autoplayAvançar slides automaticamentebooleanfalse
autoplaySpeedIntervalo de autoplay em milissegundosnumber3000
speedDuração da animação em milissegundosnumber500
arrowsMostrar setas de navegação anterior/próximabooleantrue
dotsMostrar pontos indicadores de slideboolean | { className?: string }true
dotPlacementPosição dos pontos indicadores'top' | 'bottom' | 'start' | 'end''bottom'
effectEfeito de transição'scrollx' | 'fade''scrollx'
infiniteHabilitar loop infinitobooleantrue
pauseOnHoverPausar autoplay ao passar o mousebooleantrue
verticalOrientação vertical do carrosselbooleanfalse
beforeChangeCallback antes da mudança de slide(current: number, next: number) => void-
afterChangeCallback após mudança de slide(current: number) => void-
classNameClasses CSS adicionaisstring-
data-testidID de teste para testing; elementos filhos usam como prefixostring-
PropriedadeDescriçãoTipoPadrão
childrenConteúdo do slideReactNode-
classNameClasses CSS adicionaisstring-
data-testidID de teste para testingstring-
PropriedadeDescriçãoTipoPadrão
goToNavegar para um slide específico(index: number, animate?: boolean) => void-
nextIr para o próximo slide() => void-
prevIr para o slide anterior() => void-
  • Use Carousel.Item para envolver cada slide
  • Defina uma altura fixa no Carousel para layout consistente
  • Autoplay pausa ao passar o mouse para melhor UX
  • Use as setas do teclado para navegar quando o carrossel está focado
  • Acesse os métodos goTo, next, prev via ref