Skip to main content
PolyUI/docs

展示组件

Carousel 轮播

基于 Embla Carousel 的轮播组件,支持水平/垂直方向、键盘导航、触摸滑动,可通过 useCarousel hook 获取 API 进行程序化控制。

安装

bash
pnpm dlx shadcn@latest add carousel -c packages/react

基础

Slide 1
Slide 2
Slide 3
Slide 4
Slide 5
tsx
import { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext } from "@polyui/react/carousel"
export function CarouselBasic() {
  const items = ["Slide 1", "Slide 2", "Slide 3", "Slide 4", "Slide 5"]

  return (
    <Carousel className="w-72">
      <CarouselContent>
        {items.map((item, index) => (
          <CarouselItem key={index}>
            <div className="flex aspect-square items-center justify-center rounded-xl border border-border bg-muted text-lg font-semibold">
              {item}
            </div>
          </CarouselItem>
        ))}
      </CarouselContent>
      <CarouselPrevious />
      <CarouselNext />
    </Carousel>
  )
}

多选

通过 basis 类名控制每个 CarouselItem 的宽度,实现一次显示多个项目。

Slide 1
Slide 2
Slide 3
Slide 4
Slide 5
tsx
import { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext } from "@polyui/react/carousel"
export function CarouselMultiple() {
  const items = ["Slide 1", "Slide 2", "Slide 3", "Slide 4", "Slide 5"]

  return (
    <Carousel className="w-full max-w-sm">
      <CarouselContent className="-ml-4">
        {items.map((item, index) => (
          <CarouselItem key={index} className="pl-4 basis-1/3">
            <div className="flex aspect-square items-center justify-center rounded-xl border border-border bg-muted text-lg font-semibold">
              {item}
            </div>
          </CarouselItem>
        ))}
      </CarouselContent>
      <CarouselPrevious />
      <CarouselNext />
    </Carousel>
  )
}

Props

Carousel

属性类型默认值说明
orientation"horizontal" | "vertical""horizontal"轮播方向。
optsEmblaOptionsType传递给 Embla Carousel 的配置选项。
pluginsEmblaPluginType[]Embla Carousel 插件列表(如自动播放)。
setApi(api: CarouselApi) => void获取 Embla API 实例的回调。