Ir al contenido

Carousel

Carrusel de contenido rotativo con controles de navegación, indicadores y soporte para reproducción automática.

import { Carousel } from 'asterui'

Carrusel Básico

Carrusel simple con controles de navegación 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

Reproducción Automática

Carrusel con avance automático de diapositivas. Se pausa al pasar el 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

Efecto de Fundido

Carrusel con transición de fundido en lugar de deslizamiento.

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

Carrusel Vertical

Carrusel con orientación 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

Sin Flechas

Carrusel con flechas ocultas, navegación solo por puntos.

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

Ubicación de Puntos

Posiciona los puntos indicadores en diferentes ubicaciones.

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

Contenido Personalizado

Carrusel con contenido personalizado de diapositivas como tarjetas.

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
PropiedadDescripciónTipoPredeterminado
childrenDiapositivas del carrusel (componentes Carousel.Item)ReactNode-
activeIndexÍndice de diapositiva actual (modo controlado)number-
defaultActiveIndexÍndice de diapositiva predeterminado (modo no controlado)number0
autoplayAvanzar diapositivas automáticamentebooleanfalse
autoplaySpeedIntervalo de reproducción automática en milisegundosnumber3000
speedDuración de animación en milisegundosnumber500
arrowsMostrar flechas de navegación prev/nextbooleantrue
dotsMostrar puntos indicadores de diapositivaboolean | { className?: string }true
dotPlacementPosición de los puntos indicadores'top' | 'bottom' | 'start' | 'end''bottom'
effectEfecto de transición'scrollx' | 'fade''scrollx'
infiniteHabilitar bucle infinitobooleantrue
pauseOnHoverPausar reproducción automática al pasar el mousebooleantrue
verticalOrientación vertical del carruselbooleanfalse
beforeChangeCallback antes del cambio de diapositiva(current: number, next: number) => void-
afterChangeCallback después del cambio de diapositiva(current: number) => void-
classNameClases CSS adicionalesstring-
data-testidID de prueba para testing; elementos hijos usan esto como prefijostring-
PropiedadDescripciónTipoPredeterminado
childrenContenido de la diapositivaReactNode-
classNameClases CSS adicionalesstring-
data-testidID de prueba para testingstring-
PropiedadDescripciónTipoPredeterminado
goToNavegar a una diapositiva específica(index: number, animate?: boolean) => void-
nextIr a la siguiente diapositiva() => void-
prevIr a la diapositiva anterior() => void-
  • Usa Carousel.Item para envolver cada diapositiva
  • Establece una altura fija en el Carousel para un diseño consistente
  • La reproducción automática se pausa al pasar el mouse para mejor UX
  • Usa las teclas de flecha para navegar cuando el carrusel tiene foco
  • Accede a los métodos goTo, next, prev mediante ref