Convert Figma logo to code with AI

alampros logoreact-confetti

Confetti without the cleanup.

1,477
97
1,477
17

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

  1. Basic usage:
import Confetti from 'react-confetti'

function Celebration() {
  return (
    <Confetti />
  )
}
  1. 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']}
    />
  )
}
  1. 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

  1. Install the package:
npm install react-confetti
  1. 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
  1. 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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

react-confetti

Confetti without the cleanup. Demo

Build Status npm npm bundle size npm type definitions

Based on a pen by @Gthibaud: https://codepen.io/Gthibaud/pen/ENzXbp

demogif

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

PropertyTypeDefaultDescription
widthNumberwindow.innerWidth || 300Width of the <canvas> element.
heightNumberwindow.innerHeight || 200Height of the <canvas> element.
numberOfPiecesNumber200Number 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.
frictionNumber0.99
windNumber0
gravityNumber0.1
initialVelocityXNumber | { min: Number, max: Number }4Range 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 }.
initialVelocityYNumber | { min: Number, max: Number }10Range 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 }.
colorsString[]['#f44336'
'#e91e63'
'#9c27b0'
'#673ab7'
'#3f51b5'
'#2196f3'
'#03a9f4'
'#00bcd4'
'#009688'
'#4CAF50'
'#8BC34A'
'#CDDC39'
'#FFEB3B'
'#FFC107'
'#FF9800'
'#FF5722'
'#795548']
All available Colors for the confetti pieces.
opacityNumber1.0
recycleBooltrueKeep spawning confetti after numberOfPieces pieces have been shown.
runBooltrueRun the animation loop
tweenDurationNumber5000How fast the confetti is added
tweenFunction(currentTime: number, currentValue: number, targetValue: number, duration: number, s?: number) => numbereaseInOutQuadSee tween-functions
drawShape(context: CanvasRenderingContext2D) => voidundefinedSee below
onConfettiComplete(confetti: Confetti) => voidundefinedCalled 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()
  }}
/>

NPM DownloadsLast 30 Days