
Security News
Next.js Patches Critical Middleware Vulnerability (CVE-2025-29927)
Next.js has patched a critical vulnerability (CVE-2025-29927) that allowed attackers to bypass middleware-based authorization checks in self-hosted apps.
tsparticles-preset-confetti
Advanced tools
tsParticles preset for white and red confetti launched from the screen center on a transparent background.
The first step is installing tsParticles following the instructions for vanilla javascript in the main project here
Once added the script you need one more script to be included in your page (or you can download that from jsDelivr:
<script src="https://cdn.jsdelivr.net/npm/tsparticles-engine@2/tsparticles.engine.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-move-base@2/tsparticles.move.base.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-plugin-emitters@2/tsparticles.plugin.emitters.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-shape-circle@2/tsparticles.shape.circle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-shape-square@2/tsparticles.shape.square.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-color@2/tsparticles.updater.color.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-life@2/tsparticles.updater.life.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-opacity@2/tsparticles.updater.opacity.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-out-modes@2/tsparticles.updater.out-modes.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-roll@2/tsparticles.updater.roll.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-rotate@2/tsparticles.updater.angle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-size@2/tsparticles.updater.size.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-tilt@2/tsparticles.updater.tilt.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-updater-wobble@2/tsparticles.updater.wobble.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tsparticles-preset-confetti@2/tsparticles.preset.confetti.min.js"></script>
A bundled script can also be used, this will include every needed plugin needed by the preset.
<script src="https://cdn.jsdelivr.net/npm/tsparticles-preset-confetti@2/tsparticles.preset.confetti.bundle.min.js"></script>
Once the scripts are loaded you can set up tsParticles
like this:
(async () => {
await loadConfettiPreset(tsParticles); // this is required only if you are not using the bundle script
await tsParticles.load("tsparticles", {
preset: "confetti",
});
})();
tsParticles.load("tsparticles", {
particles: {
color: {
value: ["#0000ff", "#00ff00"],
},
},
preset: "confetti",
});
Like in the sample above, the white and red colors will be replaced by blue and lime.
The preset has a single life cannon, with a short duration. The effect is immediate and ends few seconds after, but this can be customized too.
The confetti cannons are made using the Emitter plugin, which is already documented here.
These are the default cannon (emitter) options:
The default emitter options are these:
{
"startCount": 50,
"position": {
"x": 50,
"y": 50
},
"size": {
"width": 0,
"height": 0
},
"rate": {
"delay": 0,
"quantity": 0
},
"life": {
"duration": 0.1,
"count": 1
}
}
Let's see how to create the most common types of cannon animations:
To create a long-lasting cannon, the emitter life options need some changes.
The life.duration
needs to be increased, the value is in seconds
, so actually it lasts one tenth of a second.
If life.duration
is set to 0
, the cannon will last forever.
The life.count
parameter instead can be changed as well, but the animation will last for the specified
duration, life.count
times, if the life.duration
is set to 0
, the life.count
is ignored since its first life
will last forever.
tsParticles.load("tsparticles", {
emitters: {
life: {
duration: 0,
},
},
preset: "confetti",
});
This will create an infinite cannon shooting confetti from the center of the canvas.
To create a fireworks effect, or an immortal cannon, the emitter life options, again, need some changes.
The life.duration
can be kept to the default short value, but the life.count
is what we need to change.
For an immortal cannon we can change life.count
to 0
and the emitter will continue respawning every life.delay
seconds. Actually is not specified, if you want some delay between "explosions", set this value to something greater
than 0
.
For an improved effect, the position
as well can be customized. For randomizing it, it can be set to {}
, and it'll
have a random position every "explosion". If a coordinate is set, that will be used everytime, as a percentage of the
canvas size.
tsParticles.load("tsparticles", {
emitters: {
life: {
count: 0,
},
position: {
// uncomment only one of these lines,
// to have explosions on the x or y axis
// centered on the other one
// if everything is kept commented,
// random positions will be used everytime the cannon fires
// x: 50,
// y: 50
},
},
preset: "confetti",
});
Now that we have played with a single cannon, what about multiple ones?
This needs more customization since the cannons array will overwrite the existing options.
First let's start overriding the emitters (cannons) options placing an array instead of an object.
Like this:
tsParticles.load("tsparticles", {
emitters: [],
preset: "confetti",
});
If you test this, you won't see anything, because the emitters are set to an empty array, so there's nothing to show.
Now you can add emitters to the array, using the standard tsParticles emitters options.
tsParticles.load("tsparticles", {
emitters: [
{
life: {
duration: 5,
count: 1,
},
position: {
x: 0,
y: 30,
},
particles: {
move: {
direction: "top-right",
},
},
},
{
life: {
duration: 5,
count: 1,
},
position: {
x: 100,
y: 30,
},
particles: {
move: {
direction: "top-left",
},
},
},
],
preset: "confetti",
});
This samples creates two cannons, one on the left and one on the right of the canvas, at 30% of canvas height, shooting in opposite directions.
The syntax for React.js
, Preact
and Inferno
is the same.
This sample uses the class component syntax, but you can use hooks as well (if the library supports it).
import Particles from "react-particles";
import type { Engine } from "tsparticles-engine";
import { loadConfettiPreset } from "tsparticles-preset-confetti";
export class ParticlesContainer extends React.PureComponent<IProps> {
// this customizes the component tsParticles installation
async customInit(engine: Engine): Promise<void> {
// this adds the preset to tsParticles, you can safely use the
await loadConfettiPreset(engine);
}
render() {
const options = {
preset: "confetti",
};
return <Particles options={options} init={this.customInit} />;
}
}
The syntax for Vue.js 2.x
and 3.x
is the same
<Particles id="tsparticles" :particlesInit="particlesInit" :options="particlesOptions" />
const particlesOptions = {
preset: "confetti",
};
async function particlesInit(engine: Engine): Promise<void> {
await loadConfettiPreset(engine);
}
<ng-particles [id]="id" [options]="particlesOptions" [particlesInit]="particlesInit"></ng-particles>
const particlesOptions = {
preset: "confetti",
};
async function particlesInit(engine: Engine): Promise<void> {
await loadConfettiPreset(engine);
}
<Particles
id="tsparticles"
options={options}
particlesInit={particlesInit}
/>
let particlesOptions = {
preset: "confetti",
};
let particlesInit = async (engine) => {
await loadConfettiPreset(engine);
};
flowchart TD
subgraph m [Movers]
mb[Base]
end
e[tsParticles Engine] --> m
subgraph pl [Plugins]
ple[Emitters]
plm[Motion]
end
e --> pl
subgraph s [Shapes]
sc[Circle]
ssq[Square]
end
e --> s
subgraph u [Updaters]
uc[Color]
ul[Life]
uop[Opacity]
uou[Out Modes]
urol[Roll]
urot[Rotate]
usi[Size]
uti[Tilt]
uw[Wobble]
end
e --> u
subgraph pr [Presets]
prc[Confetti]
end
mb & ple & plm & sc & ssq & ua & uc & ul & uop & uou & ur & usi & uti & uw --> prc
3.0.0-beta.2 (2023-11-16)
FAQs
tsParticles confetti preset
The npm package tsparticles-preset-confetti receives a total of 2,850 weekly downloads. As such, tsparticles-preset-confetti popularity was classified as popular.
We found that tsparticles-preset-confetti demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Next.js has patched a critical vulnerability (CVE-2025-29927) that allowed attackers to bypass middleware-based authorization checks in self-hosted apps.
Security News
A survey of 500 cybersecurity pros reveals high pay isn't enough—lack of growth and flexibility is driving attrition and risking organizational security.
Product
Socket, the leader in open source security, is now available on Google Cloud Marketplace for simplified procurement and enhanced protection against supply chain attacks.