Convert Figma logo to code with AI

VincentGarreau logoparticles.js

A lightweight JavaScript library for creating particles

28,880
4,818
28,880
358

Top Related Projects

101,622

JavaScript 3D Library.

43,513

The HTML5 Creation Engine: Create beautiful digital content with the fastest, most flexible 2D WebGL renderer.

49,575

JavaScript animation engine

19,483

GSAP (GreenSock Animation Platform), a JavaScript animation library for the modern web

tsParticles - Easily create highly customizable JavaScript particles effects, confetti explosions and fireworks animations and use them as animated backgrounds for your website. Ready to use components available for React.js, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Inferno, Solid, Riot and Web Components.

18,361

The motion graphics toolbelt for the web

Quick Overview

particles.js is a lightweight JavaScript library for creating particles animations on web pages. It allows developers to add interactive, customizable particle systems to their websites with minimal effort, enhancing the visual appeal and user engagement of web applications.

Pros

  • Easy to implement and customize with a wide range of configuration options
  • Lightweight and performant, with minimal impact on page load times
  • Compatible with most modern browsers and devices
  • Highly interactive, allowing for mouse and touch events

Cons

  • Limited to 2D particle systems, lacking support for 3D animations
  • May impact performance on older devices or when using a large number of particles
  • Documentation could be more comprehensive, especially for advanced usage
  • No built-in support for responsive design adjustments

Code Examples

  1. Basic implementation:
particlesJS('particles-js', {
  particles: {
    number: { value: 80 },
    color: { value: '#ffffff' },
    shape: { type: 'circle' },
    opacity: { value: 0.5 },
    size: { value: 3 }
  }
});

This code initializes a basic particle system with white circular particles.

  1. Customizing particle movement:
particlesJS('particles-js', {
  particles: {
    number: { value: 100 },
    move: {
      enable: true,
      speed: 6,
      direction: 'none',
      random: false,
      straight: false,
      out_mode: 'out',
      bounce: false
    }
  }
});

This example configures particle movement with specific speed and behavior settings.

  1. Adding interactivity:
particlesJS('particles-js', {
  interactivity: {
    detect_on: 'canvas',
    events: {
      onhover: { enable: true, mode: 'repulse' },
      onclick: { enable: true, mode: 'push' }
    },
    modes: {
      repulse: { distance: 100, duration: 0.4 },
      push: { particles_nb: 4 }
    }
  }
});

This code adds interactivity to the particle system, allowing particles to react to mouse hover and click events.

Getting Started

  1. Include the particles.js library in your HTML file:

    <script src="https://cdn.jsdelivr.net/npm/particles.js@2.0.0/particles.min.js"></script>
    
  2. Add a container element for the particles:

    <div id="particles-js"></div>
    
  3. Initialize particles.js with a basic configuration:

    particlesJS('particles-js', {
      particles: {
        number: { value: 80 },
        color: { value: '#ffffff' },
        shape: { type: 'circle' }
      }
    });
    
  4. Customize the configuration to suit your needs, referring to the documentation for available options.

Competitor Comparisons

101,622

JavaScript 3D Library.

Pros of three.js

  • More comprehensive 3D rendering capabilities
  • Larger community and ecosystem
  • Supports a wider range of 3D features and effects

Cons of three.js

  • Steeper learning curve
  • Larger file size and potentially higher performance overhead
  • May be overkill for simple particle effects

Code Comparison

particles.js:

particlesJS("particles-js", {
  particles: {
    number: { value: 80, density: { enable: true, value_area: 800 } },
    color: { value: "#ffffff" },
    shape: { type: "circle" },
    // ... more configuration options
  }
});

three.js:

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

three.js is a full-featured 3D library that offers extensive capabilities for creating complex 3D scenes and animations. It provides a wide range of tools and features for 3D rendering, making it suitable for advanced projects.

particles.js, on the other hand, is specifically designed for creating particle systems and animations. It's more lightweight and easier to use for simple particle effects, but lacks the comprehensive 3D capabilities of three.js.

43,513

The HTML5 Creation Engine: Create beautiful digital content with the fastest, most flexible 2D WebGL renderer.

Pros of PixiJS

  • More comprehensive 2D rendering engine with advanced features like sprites, textures, and filters
  • Better performance for complex graphics and animations, especially for games
  • Larger community and ecosystem with more plugins and resources

Cons of PixiJS

  • Steeper learning curve due to its more extensive API and features
  • Larger file size, which may impact load times for simpler projects
  • Overkill for basic particle effects, where particles.js might be more suitable

Code Comparison

particles.js:

particlesJS("particles-js", {
  particles: {
    number: { value: 80 },
    color: { value: "#ffffff" },
    shape: { type: "circle" }
  }
});

PixiJS:

const app = new PIXI.Application();
document.body.appendChild(app.view);
const particles = new PIXI.ParticleContainer(1000);
app.stage.addChild(particles);

Summary

PixiJS is a more powerful and versatile 2D rendering engine, ideal for complex graphics and game development. It offers better performance and a rich ecosystem but comes with a steeper learning curve and larger file size. particles.js, on the other hand, is simpler and more focused on particle effects, making it easier to use for basic particle animations but less suitable for more complex graphics projects.

49,575

JavaScript animation engine

Pros of anime

  • More versatile, capable of animating various properties beyond particles
  • Smaller file size, leading to faster load times
  • Easier to customize and create complex animations

Cons of anime

  • Less specialized for particle effects
  • May require more code to achieve similar particle animations
  • Steeper learning curve for particle-specific animations

Code Comparison

particles.js:

particlesJS("particles-js", {
  particles: {
    number: { value: 80, density: { enable: true, value_area: 800 } },
    color: { value: "#ffffff" },
    shape: { type: "circle" },
    // ... more configuration
  }
});

anime:

anime({
  targets: '.particle',
  translateX: function() { return anime.random(-500, 500); },
  translateY: function() { return anime.random(-500, 500); },
  scale: function() { return anime.random(0.1, 2); },
  easing: 'easeOutExpo',
  duration: 3000,
  delay: anime.stagger(10)
});

particles.js is specifically designed for creating particle animations, making it easier to set up particle systems with minimal code. anime, on the other hand, is a more general-purpose animation library that can be used to create particle effects but requires more manual setup. anime offers greater flexibility for complex animations beyond just particles, while particles.js is more focused and easier to use for its specific purpose.

19,483

GSAP (GreenSock Animation Platform), a JavaScript animation library for the modern web

Pros of GSAP

  • More comprehensive animation toolkit, offering a wide range of features beyond particle effects
  • Better performance and optimization for complex animations
  • Extensive documentation and community support

Cons of GSAP

  • Steeper learning curve due to its broader feature set
  • Larger file size, which may impact load times for simpler projects
  • Requires a license for commercial use, unlike particles.js which is open-source

Code Comparison

particles.js:

particlesJS("particles-js", {
  particles: {
    number: { value: 80, density: { enable: true, value_area: 800 } },
    color: { value: "#ffffff" },
    shape: { type: "circle" }
  }
});

GSAP:

gsap.to(".box", {
  duration: 2,
  x: 100,
  y: 50,
  rotation: 360,
  ease: "bounce.out"
});

The code snippets demonstrate the different focus of each library. particles.js is specifically designed for creating particle effects, while GSAP offers a more general-purpose animation toolkit with a wider range of properties and easing functions.

tsParticles - Easily create highly customizable JavaScript particles effects, confetti explosions and fireworks animations and use them as animated backgrounds for your website. Ready to use components available for React.js, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Inferno, Solid, Riot and Web Components.

Pros of tsparticles

  • More active development and frequent updates
  • Broader range of features and customization options
  • TypeScript support for improved type safety and developer experience

Cons of tsparticles

  • Larger file size due to additional features
  • Steeper learning curve for advanced configurations

Code Comparison

particles.js:

particlesJS('particles-js', {
  particles: {
    number: { value: 80, density: { enable: true, value_area: 800 } },
    color: { value: '#ffffff' },
    // ... other configuration options
  }
});

tsparticles:

tsParticles.load('tsparticles', {
  particles: {
    number: { value: 80, density: { enable: true, area: 800 } },
    color: { value: '#ffffff' },
    // ... other configuration options
  }
});

Both libraries use similar configuration structures, but tsparticles offers more advanced options and features. The main difference in basic usage is the function name (particlesJS vs tsParticles.load) and some slight variations in property names (e.g., value_area vs area).

tsparticles provides a more extensive API and additional features like particle shapes, animations, and interactivity options, making it more versatile for complex particle effects. However, particles.js may be simpler to use for basic implementations and has a smaller footprint.

18,361

The motion graphics toolbelt for the web

Pros of mojs

  • More comprehensive animation toolkit with a wider range of effects
  • Better support for custom shapes and complex animations
  • Offers a modular approach, allowing for more flexibility in implementation

Cons of mojs

  • Steeper learning curve due to its more complex API
  • Larger file size, which may impact page load times
  • Less suitable for simple particle effects compared to particles.js

Code Comparison

particles.js:

particlesJS("particles-js", {
  particles: {
    number: { value: 80 },
    color: { value: "#ffffff" },
    shape: { type: "circle" }
  }
});

mojs:

const burst = new mojs.Burst({
  radius: { 0: 100 },
  count: 10,
  children: {
    shape: 'circle',
    fill: { '#ffffff' : '#000000' },
    duration: 1000
  }
});

Summary

particles.js is simpler and more focused on particle animations, making it easier to implement basic particle effects. mojs, on the other hand, offers a more comprehensive animation toolkit with greater flexibility and customization options, but at the cost of increased complexity and file size. The choice between the two depends on the specific requirements of your project and the level of animation complexity you need.

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

particles.js

A lightweight JavaScript library for creating particles.


Demo / Generator

particles.js generator

Configure, export, and share your particles.js configuration on CodePen:
http://vincentgarreau.com/particles.js/

CodePen demo:
http://codepen.io/VincentGarreau/pen/pnlso


Usage

Load particles.js and configure the particles:

index.html

<div id="particles-js"></div>

<script src="particles.js"></script>

app.js

/* particlesJS.load(@dom-id, @path-json, @callback (optional)); */
particlesJS.load('particles-js', 'assets/particles.json', function() {
  console.log('callback - particles.js config loaded');
});

particles.json

{
  "particles": {
    "number": {
      "value": 80,
      "density": {
        "enable": true,
        "value_area": 800
      }
    },
    "color": {
      "value": "#ffffff"
    },
    "shape": {
      "type": "circle",
      "stroke": {
        "width": 0,
        "color": "#000000"
      },
      "polygon": {
        "nb_sides": 5
      },
      "image": {
        "src": "img/github.svg",
        "width": 100,
        "height": 100
      }
    },
    "opacity": {
      "value": 0.5,
      "random": false,
      "anim": {
        "enable": false,
        "speed": 1,
        "opacity_min": 0.1,
        "sync": false
      }
    },
    "size": {
      "value": 10,
      "random": true,
      "anim": {
        "enable": false,
        "speed": 80,
        "size_min": 0.1,
        "sync": false
      }
    },
    "line_linked": {
      "enable": true,
      "distance": 300,
      "color": "#ffffff",
      "opacity": 0.4,
      "width": 2
    },
    "move": {
      "enable": true,
      "speed": 12,
      "direction": "none",
      "random": false,
      "straight": false,
      "out_mode": "out",
      "bounce": false,
      "attract": {
        "enable": false,
        "rotateX": 600,
        "rotateY": 1200
      }
    }
  },
  "interactivity": {
    "detect_on": "canvas",
    "events": {
      "onhover": {
        "enable": false,
        "mode": "repulse"
      },
      "onclick": {
        "enable": true,
        "mode": "push"
      },
      "resize": true
    },
    "modes": {
      "grab": {
        "distance": 800,
        "line_linked": {
          "opacity": 1
        }
      },
      "bubble": {
        "distance": 800,
        "size": 80,
        "duration": 2,
        "opacity": 0.8,
        "speed": 3
      },
      "repulse": {
        "distance": 400,
        "duration": 0.4
      },
      "push": {
        "particles_nb": 4
      },
      "remove": {
        "particles_nb": 2
      }
    }
  },
  "retina_detect": true
}

Options

keyoption type / notesexample
particles.number.valuenumber40
particles.number.density.enablebooleantrue / false
particles.number.density.value_areanumber800
particles.color.valueHEX (string)
RGB (object)
HSL (object)
array selection (HEX)
random (string)
"#b61924"
{r:182, g:25, b:36}
{h:356, s:76, l:41}
["#b61924", "#333333", "999999"]
"random"
particles.shape.typestring
array selection
"circle"
"edge"
"triangle"
"polygon"
"star"
"image"
["circle", "triangle", "image"]
particles.shape.stroke.widthnumber2
particles.shape.stroke.colorHEX (string)"#222222"
particles.shape.polygon.nb_slidesnumber5
particles.shape.image.srcpath link
svg / png / gif / jpg
"assets/img/yop.svg"
"http://mywebsite.com/assets/img/yop.png"
particles.shape.image.widthnumber
(for aspect ratio)
100
particles.shape.image.heightnumber
(for aspect ratio)
100
particles.opacity.valuenumber (0 to 1)0.75
particles.opacity.randombooleantrue / false
particles.opacity.anim.enablebooleantrue / false
particles.opacity.anim.speednumber3
particles.opacity.anim.opacity_minnumber (0 to 1)0.25
particles.opacity.anim.syncbooleantrue / false
particles.size.valuenumber20
particles.size.randombooleantrue / false
particles.size.anim.enablebooleantrue / false
particles.size.anim.speednumber3
particles.size.anim.size_minnumber0.25
particles.size.anim.syncbooleantrue / false
particles.line_linked.enablebooleantrue / false
particles.line_linked.distancenumber150
particles.line_linked.colorHEX (string)#ffffff
particles.line_linked.opacitynumber (0 to 1)0.5
particles.line_linked.widthnumber1.5
particles.move.enablebooleantrue / false
particles.move.speednumber4
particles.move.directionstring"none"
"top"
"top-right"
"right"
"bottom-right"
"bottom"
"bottom-left"
"left"
"top-left"
particles.move.randombooleantrue / false
particles.move.straightbooleantrue / false
particles.move.out_modestring
(out of canvas)
"out"
"bounce"
particles.move.bounceboolean
(between particles)
true / false
particles.move.attract.enablebooleantrue / false
particles.move.attract.rotateXnumber3000
particles.move.attract.rotateYnumber1500
interactivity.detect_onstring"canvas", "window"
interactivity.events.onhover.enablebooleantrue / false
interactivity.events.onhover.modestring
array selection
"grab"
"bubble"
"repulse"
["grab", "bubble"]
interactivity.events.onclick.enablebooleantrue / false
interactivity.events.onclick.modestring
array selection
"push"
"remove"
"bubble"
"repulse"
["push", "repulse"]
interactivity.events.resizebooleantrue / false
interactivity.events.modes.grab.distancenumber100
interactivity.events.modes.grab.line_linked.opacitynumber (0 to 1)0.75
interactivity.events.modes.bubble.distancenumber100
interactivity.events.modes.bubble.sizenumber40
interactivity.events.modes.bubble.durationnumber
(second)
0.4
interactivity.events.modes.repulse.distancenumber200
interactivity.events.modes.repulse.durationnumber
(second)
1.2
interactivity.events.modes.push.particles_nbnumber4
interactivity.events.modes.push.particles_nbnumber4
retina_detectbooleantrue / false

Packages install

npm

https://www.npmjs.com/package/particles.js

npm install particles.js
Bower
bower install particles.js --save
Rails Assets
gem 'rails-assets-particles.js'
Meteor

https://atmospherejs.com/newswim/particles

meteor add newswim:particles

Hosting / CDN

Please use this host or your own to load particles.js on your projects

http://www.jsdelivr.com/#!particles.js

NPM DownloadsLast 30 Days