Top Related Projects
🎉 performant confetti animation in the browser
Quick Overview
React-confetti is a lightweight React component that adds a confetti animation effect to your web applications. It creates a canvas overlay and renders customizable confetti particles, allowing developers to easily add celebratory or festive visual elements to their React projects.
Pros
- Easy to integrate into existing React projects
- Highly customizable with numerous configuration options
- Performant, using HTML5 canvas for rendering
- Responsive and works well on various screen sizes
Cons
- Limited to React applications only
- May impact performance on low-end devices if overused
- Requires additional setup for server-side rendering
- Documentation could be more comprehensive
Code Examples
- Basic usage:
import Confetti from 'react-confetti'
function Celebration() {
return (
<Confetti />
)
}
- Customizing confetti properties:
import Confetti from 'react-confetti'
function CustomConfetti() {
return (
<Confetti
width={1600}
height={1000}
numberOfPieces={200}
gravity={0.3}
colors={['#f00', '#0f0', '#00f']}
/>
)
}
- Using with window dimensions:
import Confetti from 'react-confetti'
import { useWindowSize } from 'react-use'
function WindowSizedConfetti() {
const { width, height } = useWindowSize()
return (
<Confetti
width={width}
height={height}
/>
)
}
Getting Started
- Install the package:
npm install react-confetti
- Import and use in your React component:
import React from 'react'
import Confetti from 'react-confetti'
function App() {
return (
<div>
<h1>Celebration Time!</h1>
<Confetti />
</div>
)
}
export default App
- Customize as needed using the available props documented in the project's README.
Competitor Comparisons
🎉 performant confetti animation in the browser
Pros of canvas-confetti
- Lightweight and framework-agnostic, usable in any JavaScript environment
- More customization options for confetti behavior and appearance
- Supports both one-time bursts and continuous streams of confetti
Cons of canvas-confetti
- Requires manual integration with React components
- Less optimized for React-specific use cases
- May need additional wrapper code for seamless React integration
Code Comparison
react-confetti:
import Confetti from 'react-confetti'
<Confetti
width={window.width}
height={window.height}
recycle={false}
numberOfPieces={200}
/>
canvas-confetti:
import confetti from 'canvas-confetti'
confetti({
particleCount: 200,
spread: 70,
origin: { y: 0.6 }
})
Summary
canvas-confetti offers more flexibility and customization options, making it suitable for various JavaScript projects. However, react-confetti provides a more seamless integration with React applications, requiring less boilerplate code. The choice between the two depends on the specific project requirements and the developer's preference for either a React-specific solution or a more versatile, framework-agnostic approach.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
react-confetti
Confetti without the cleanup. Demo
Based on a pen by @Gthibaud: https://codepen.io/Gthibaud/pen/ENzXbp
Install
npm install react-confetti
Use
width
and height
props are recommended. They will default to the initial window dimensions, but will not respond to resize events. It is recommended to provide the dimensions yourself. Here is an example using a hook:
import React from 'react'
import useWindowSize from 'react-use/lib/useWindowSize'
import Confetti from 'react-confetti'
export default () => {
const { width, height } = useWindowSize()
return (
<Confetti
width={width}
height={height}
/>
)
}
Props
Property | Type | Default | Description |
---|---|---|---|
width | Number | window.innerWidth || 300 | Width of the <canvas> element. |
height | Number | window.innerHeight || 200 | Height of the <canvas> element. |
numberOfPieces | Number | 200 | Number of confetti pieces at one time. |
confettiSource | { x: Number, y: Number, w: Number, h: Number } | {x: 0, y: 0, w: canvas.width, h:0} | Rectangle where the confetti should spawn. Default is across the top. |
friction | Number | 0.99 | |
wind | Number | 0 | |
gravity | Number | 0.1 | |
initialVelocityX | Number | { min: Number, max: Number } | 4 | Range of values between which confetti is emitted horizontally, positive numbers being rightward, and negative numbers being leftward. Giving a number x is equivalent to giving a range { min: -x, max: x } . |
initialVelocityY | Number | { min: Number, max: Number } | 10 | Range of values between which confetti is emitted vertically, positive numbers being downward, and negative numbers being upward. Giving a number y is equivalent to giving a range { min: -y, max: 0 } . |
colors | String[] | ['#f44336' '#e91e63' '#9c27b0' '#673ab7' '#3f51b5' '#2196f3' '#03a9f4' '#00bcd4' '#009688' '#4CAF50' '#8BC34A' '#CDDC39' '#FFEB3B' '#FFC107' '#FF9800' '#FF5722' '#795548'] | All available Colors for the confetti pieces. |
opacity | Number | 1.0 | |
recycle | Bool | true | Keep spawning confetti after numberOfPieces pieces have been shown. |
run | Bool | true | Run the animation loop |
tweenDuration | Number | 5000 | How fast the confetti is added |
tweenFunction | (currentTime: number, currentValue: number, targetValue: number, duration: number, s?: number) => number | easeInOutQuad | See tween-functions |
drawShape | (context: CanvasRenderingContext2D) => void | undefined | See below |
onConfettiComplete | (confetti: Confetti) => void | undefined | Called when all confetti has fallen off-canvas. |
drawShape()
Draw a custom shape for a particle. If not provided, defaults to a random selection of a square, circle or strip confetto. The function is called with the canvas context as a parameter and the Particle as the this
context.
For example, to draw all spirals:
<Confetti
drawShape={ctx => {
ctx.beginPath()
for(let i = 0; i < 22; i++) {
const angle = 0.35 * i
const x = (0.2 + (1.5 * angle)) * Math.cos(angle)
const y = (0.2 + (1.5 * angle)) * Math.sin(angle)
ctx.lineTo(x, y)
}
ctx.stroke()
ctx.closePath()
}}
/>
Top Related Projects
🎉 performant confetti animation in the browser
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot