Top Related Projects
JavaScript 3D Library.
The HTML5 Creation Engine: Create beautiful digital content with the fastest, most flexible 2D WebGL renderer.
JavaScript animation engine
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.
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
- 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.
- 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.
- 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
-
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>
-
Add a container element for the particles:
<div id="particles-js"></div>
-
Initialize particles.js with a basic configuration:
particlesJS('particles-js', { particles: { number: { value: 80 }, color: { value: '#ffffff' }, shape: { type: 'circle' } } });
-
Customize the configuration to suit your needs, referring to the documentation for available options.
Competitor Comparisons
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.
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.
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.
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.
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 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
particles.js
A lightweight JavaScript library for creating particles.
Demo / 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
key | option type / notes | example |
---|---|---|
particles.number.value | number | 40 |
particles.number.density.enable | boolean | true / false |
particles.number.density.value_area | number | 800 |
particles.color.value | HEX (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.type | string array selection | "circle" "edge" "triangle" "polygon" "star" "image" ["circle", "triangle", "image"] |
particles.shape.stroke.width | number | 2 |
particles.shape.stroke.color | HEX (string) | "#222222" |
particles.shape.polygon.nb_slides | number | 5 |
particles.shape.image.src | path link svg / png / gif / jpg | "assets/img/yop.svg" "http://mywebsite.com/assets/img/yop.png" |
particles.shape.image.width | number (for aspect ratio) | 100 |
particles.shape.image.height | number (for aspect ratio) | 100 |
particles.opacity.value | number (0 to 1) | 0.75 |
particles.opacity.random | boolean | true / false |
particles.opacity.anim.enable | boolean | true / false |
particles.opacity.anim.speed | number | 3 |
particles.opacity.anim.opacity_min | number (0 to 1) | 0.25 |
particles.opacity.anim.sync | boolean | true / false |
particles.size.value | number | 20 |
particles.size.random | boolean | true / false |
particles.size.anim.enable | boolean | true / false |
particles.size.anim.speed | number | 3 |
particles.size.anim.size_min | number | 0.25 |
particles.size.anim.sync | boolean | true / false |
particles.line_linked.enable | boolean | true / false |
particles.line_linked.distance | number | 150 |
particles.line_linked.color | HEX (string) | #ffffff |
particles.line_linked.opacity | number (0 to 1) | 0.5 |
particles.line_linked.width | number | 1.5 |
particles.move.enable | boolean | true / false |
particles.move.speed | number | 4 |
particles.move.direction | string | "none" "top" "top-right" "right" "bottom-right" "bottom" "bottom-left" "left" "top-left" |
particles.move.random | boolean | true / false |
particles.move.straight | boolean | true / false |
particles.move.out_mode | string (out of canvas) | "out" "bounce" |
particles.move.bounce | boolean (between particles) | true / false |
particles.move.attract.enable | boolean | true / false |
particles.move.attract.rotateX | number | 3000 |
particles.move.attract.rotateY | number | 1500 |
interactivity.detect_on | string | "canvas", "window" |
interactivity.events.onhover.enable | boolean | true / false |
interactivity.events.onhover.mode | string array selection | "grab" "bubble" "repulse" ["grab", "bubble"] |
interactivity.events.onclick.enable | boolean | true / false |
interactivity.events.onclick.mode | string array selection | "push" "remove" "bubble" "repulse" ["push", "repulse"] |
interactivity.events.resize | boolean | true / false |
interactivity.events.modes.grab.distance | number | 100 |
interactivity.events.modes.grab.line_linked.opacity | number (0 to 1) | 0.75 |
interactivity.events.modes.bubble.distance | number | 100 |
interactivity.events.modes.bubble.size | number | 40 |
interactivity.events.modes.bubble.duration | number (second) | 0.4 |
interactivity.events.modes.repulse.distance | number | 200 |
interactivity.events.modes.repulse.duration | number (second) | 1.2 |
interactivity.events.modes.push.particles_nb | number | 4 |
interactivity.events.modes.push.particles_nb | number | 4 |
retina_detect | boolean | true / 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
Top Related Projects
JavaScript 3D Library.
The HTML5 Creation Engine: Create beautiful digital content with the fastest, most flexible 2D WebGL renderer.
JavaScript animation engine
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.
The motion graphics toolbelt for the web
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