JGuang

彩纸庆祝

Confetti · Magic UI

交互预览
npx shadcn@latest add https://jiguang132.com/r/magic-ui/confetti.json

部分上游示例使用在线图片、视频或推文;这些内容依赖网络与第三方服务,不代表本地预览加载失败。

彩纸庆祝

Magic UI 的独立组件,请不要替换为 JGuang UI/Base UI 的同名 API。

安装

npx shadcn@latest add https://jiguang132.com/r/magic-ui/confetti.json

Registry 将复制可编辑源码和依赖到独立命名空间。检查主题变量与 Tailwind CSS v4 配置;不要覆盖已有的项目组件。

使用与验证

在左侧选择组件,在预览中操作它的状态;使用“查看代码”检查真实源码。安装后执行类型检查和构建,再验证键盘焦点、手机布局与深浅色主题。

来源

https://github.com/magicuidesign/magicui/tree/cdb348cb4c72a9b54b554d8617801e479fbc8714 MIT 许可证;不包括付费内容。下方提供上游英文参考内容,中文使用指南已适配;上游详细参考暂保留英文。


适用场景

通过 ref 或按钮发射 Canvas 彩纸。

示例使用的原生参数

从该组件全部本地示例的 JSX 提取,按导入模块及组件区分;包括复合示例中实际使用的其他 Magic UI 组件。不是全部属性清单,也不是宿主通用 variant API。展开对象需结合示例数据声明;完整类型与默认值见下方源码参考。

所属组件参数说明示例来源
Confetti.ref (confetti)指向原生命令式 API 或 DOM 目标的 React 引用,不是业务值。examples/confetti-demo.tsx
Confetti.className (confetti)当前原生组件的样式类,需先配置 Tailwind 与所需 CSS。examples/confetti-demo.tsx
Confetti.onMouseEnter (confetti)示例中的原生悬停处理函数,通常调用彩纸 ref。examples/confetti-demo.tsx
ConfettiButton.children (confetti)原生子内容,保留所属组件对文本/元素的约束。examples/confetti-basic-cannon.tsx、examples/confetti-random-direction.tsx
ConfettiButton.options (confetti)原生 canvas-confetti 配置/全局配置。examples/confetti-random-direction.tsx

交互与状态检查

  • 彩纸庆祝 · 默认示例 — confetti-demo
  • 彩纸庆祝 · 基础喷射 — confetti-basic-cannon
  • 彩纸庆祝 · 随机方向 — confetti-random-direction
  • 彩纸庆祝 · 烟花 — confetti-fireworks
  • 彩纸庆祝 · 星形彩纸 — confetti-stars
  • 彩纸庆祝 · 两侧喷射 — confetti-side-cannons
  • 彩纸庆祝 · 自定义形状 — confetti-custom-shapes
  • 彩纸庆祝 · 表情彩纸 — confetti-emoji

这些名称是实际示例入口,不是新增组件属性或独立组件数量。选择对应示例后,检查指针/键盘行为、深浅色、手机尺寸和加载失败;纯装饰特效不应伪造禁用、错误或提交状态。完整示例安装包含其真实依赖闭包。

业务接入边界

Confetti 与 ConfettiButton API 不同;尊重减少动画并在退出时重置/销毁资源;庆祝动画不是交易成功证据。

宿主与动画配置

初始化 Tailwind CSS v4、语义 CSS 变量及 dark 变体;按本地 Registry 的独立命名空间导入。复用已有 next-themes Provider,不混入 JGuang UI/Base UI/HeroUI API。进入视口再挂载特效,离开后卸载;为 Canvas/WebGL 不可用、网络媒体失败提供静态替代。遵循 prefers-reduced-motion,并验证计时器、RAF、观察器和事件监听已清理;不能仅凭 CSS 停止就宣称引擎已停止。示例不提供后端、登录、支付或真实 AI 流。这里的实用指南为双语,上游详细参考和演示文本仍保留原文。

可用状态与示例

彩纸庆祝 · 默认示例、彩纸庆祝 · 基础喷射、彩纸庆祝 · 随机方向、彩纸庆祝 · 烟花、彩纸庆祝 · 星形彩纸、彩纸庆祝 · 两侧喷射、彩纸庆祝 · 自定义形状、彩纸庆祝 · 表情彩纸

组件中的状态与数据为演示用途,不包含后端接口。接入实际项目时请检查源码中的公开参数,再连接业务数据。

Installation

<Tabs defaultValue="cli"> <TabsList> <TabsTrigger value="cli">CLI</TabsTrigger> <TabsTrigger value="manual">Manual</TabsTrigger> </TabsList> <TabsContent value="cli">
npx shadcn@latest add @magicui/confetti
</TabsContent> <TabsContent value="manual"> <Steps>

<Step>Install the following dependencies:</Step>

npm install canvas-confetti

<Step>Copy and paste the following code into your project.</Step>

<Step>Update the import paths to match your project setup.</Step>

</Steps> </TabsContent> </Tabs>

Examples

Basic

Random Direction

Fireworks

Side Cannons

Stars

Custom Shapes

Emoji

Usage

import { useRef } from "react"

import { Confetti, type ConfettiRef } from "@/components/ui/confetti"

export function ConfettiDemo() {
  const confettiRef = useRef<ConfettiRef>(null)

  return (
    <div>
      <Confetti ref={confettiRef} manualstart />
      <button onClick={() => confettiRef.current?.fire()}>
        Trigger Confetti
      </button>
    </div>
  )
}

Props

Confetti

PropTypeDefaultDescription
refReact.Ref<ConfettiRef>nullRef exposing imperative fire(options?: ConfettiOptions) method
optionsConfettiOptions{}Default options for automatic or imperative confetti triggers
globalOptionsConfettiGlobalOptions{ resize: true, useWorker: true }Global options passed to canvas-confetti.create()
manualstartBooleanfalsePrevents automatic confetti firing on component mount
classNameStringundefinedCustom CSS classes applied to the canvas element

ConfettiRef

MethodParametersReturn TypeDescription
fireoptions?: ConfettiOptionsPromise<void> | voidImperatively triggers a confetti burst on the canvas instance

ConfettiOptions

FieldTypeDefaultDescription
particleCountInteger50Number of confetti particles to launch
angleNumber90Launch angle in degrees
spreadNumber45Spread angle in degrees
startVelocityNumber45Initial particle velocity
decayNumber0.9Velocity decay rate
gravityNumber1Gravity applied to particles
driftNumber0Horizontal drift factor
flatBooleanfalseRenders flat 2D shapes
ticksNumber200Number of animation frames confetti lasts
origin{ x: number, y: number }{ x: 0.5, y: 0.5 }Normalized viewport origin coordinates (0.0 to 1.0)
colorsArray of StringsHEX arrayCustom HEX color palette
shapesArray of Strings['square', 'circle', 'star']Particle shapes or custom text shapes
zIndexInteger9999Z-index of the confetti burst
scalarNumber1Scaling factor for particle dimensions

ConfettiButton

PropTypeDefaultDescription
optionsConfettiOptions & ConfettiGlobalOptions{}Options for the confetti launched on button click
childrenReact.ReactNodenullButton label and child elements
refReact.Ref<HTMLButtonElement>nullForwarded DOM reference to the underlying button

Credits

完整示例安装

组件安装命令只安装组件;下列示例命令还包含该示例实际导入的其他组件、原生辅助 UI、工具和固定版本依赖。辅助源码不算独立组件。

彩纸庆祝 · 默认示例

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/confetti/confetti-demo.json

默认导入: @/components/magicui/examples/confetti-demo

依赖: @radix-ui/react-slot@1.3.0, @types/canvas-confetti@1.9.0, canvas-confetti@1.9.3, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

彩纸庆祝 · 基础喷射

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/confetti/confetti-basic-cannon.json

默认导入: @/components/magicui/examples/confetti-basic-cannon

依赖: @radix-ui/react-slot@1.3.0, @types/canvas-confetti@1.9.0, canvas-confetti@1.9.3, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

彩纸庆祝 · 随机方向

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/confetti/confetti-random-direction.json

默认导入: @/components/magicui/examples/confetti-random-direction

依赖: @radix-ui/react-slot@1.3.0, @types/canvas-confetti@1.9.0, canvas-confetti@1.9.3, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

彩纸庆祝 · 烟花

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/confetti/confetti-fireworks.json

默认导入: @/components/magicui/examples/confetti-fireworks

依赖: @radix-ui/react-slot@1.3.0, @types/canvas-confetti@1.9.0, canvas-confetti@1.9.3, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

彩纸庆祝 · 星形彩纸

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/confetti/confetti-stars.json

默认导入: @/components/magicui/examples/confetti-stars

依赖: @radix-ui/react-slot@1.3.0, @types/canvas-confetti@1.9.0, canvas-confetti@1.9.3, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

彩纸庆祝 · 两侧喷射

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/confetti/confetti-side-cannons.json

默认导入: @/components/magicui/examples/confetti-side-cannons

依赖: @radix-ui/react-slot@1.3.0, @types/canvas-confetti@1.9.0, canvas-confetti@1.9.3, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

彩纸庆祝 · 自定义形状

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/confetti/confetti-custom-shapes.json

默认导入: @/components/magicui/examples/confetti-custom-shapes

依赖: @radix-ui/react-slot@1.3.0, @types/canvas-confetti@1.9.0, canvas-confetti@1.9.3, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

彩纸庆祝 · 表情彩纸

npx shadcn@latest add https://jiguang132.com/r/magic-ui/examples/confetti/confetti-emoji.json

默认导入: @/components/magicui/examples/confetti-emoji

依赖: @radix-ui/react-slot@1.3.0, @types/canvas-confetti@1.9.0, canvas-confetti@1.9.3, class-variance-authority@0.7.1, clsx@2.1.1, tailwind-merge@3.6.0

最小使用与主题

import Demo from '@/components/magicui/examples/confetti-demo';
import { ThemeProvider } from 'next-themes';
export default function Example() {
  return <ThemeProvider attribute="class" defaultTheme="system" enableSystem><Demo /></ThemeProvider>;
}

项目须先配置 Tailwind CSS v4、语义颜色变量和 dark 变体。已有 next-themes Provider 时复用它,不要重复嵌套。Next Link 示例需要 Next.js 环境;静态 Vite 项目可保留原生组件代码,并自行将示例的页面链接改为项目路由。部分演示图片、视频和推文依赖网络;示例不包含登录或后端服务。实用指南与示例标签已提供中文,上游详细英文参考及演示数据未宣称全文翻译。

源码参数参考

以下实现签名和类型从本地固定版本源码生成。保留可选属性、原生继承类型、联合分支和 never 限制;不会将其他设计系统的 API 混入。forwardRef 实现中的 ref 属于 React 引用,不是新增业务属性。此区域是原始类型参考,不是上游说明的全文翻译。

ConfettiButton({ options, children, onClick, ...props }, ref)
export interface ConfettiButtonProps extends React.ComponentPropsWithoutRef<
  typeof Button
> {
  options?: ConfettiOptions &
    ConfettiGlobalOptions & { canvas?: HTMLCanvasElement }
}

原生与外部类型

以下外部类型仍由 React 或资源自身依赖定义,没有手工展开为虚构属性。实际可用类型以安装版本的 TypeScript 检查为准。

HTMLButtonElement
React.ComponentPropsWithoutRef<
  typeof Button
>
ConfettiOptions
ConfettiGlobalOptions
HTMLCanvasElement