Lightweight, High Performance Particles in Canvas

Related tags

Effect sparticles
Overview

Sparticles

https://sparticlesjs.dev

Lightweight, High Performance Particles in Canvas.
For those occasions when you 👏 just 👏 gotta 👏 have 👏 sparkles, snow, or stars on your homepage!

Image of little coloured stars known as "Sparticles" running at 120fps



installation

Depending on how your project looks,

vanilla

  1. firstly make sure you've downloaded the latest version of the script to your application directory (if you are running on a CMS you might also need to upload the file to your server). The file you'll want to use is; dist/sparticles.min.js to make sure it downloads the fastest for your users.

  2. After you've downloaded, or uploaded, the sparticles.min.js file to the correct place, you'll then need to include it in your web page;

<script src="../path/to/sparticles.min.js"></script>
  1. And finally, you should then be able to initialise the Sparticles by running this code in your javascript;
    (make sure this code runs after you've included the script above.)
<script>
  window.onload = function() {
    let myElement = document.getElementById("myDiv");
    let mySparticles = new Sparticles(myElement, { count: 100 }, 400);
  }
</script>

jquery

For jQuery sites, you may follow all of the steps above, but replace the third step with something like below;

<script>
  let $el = $("#myDiv");
  let mySparticles = new Sparticles($el[0], { count: 100 }, 400);
</script>

app / bundler

If you're running a more modern type of application with something like Svelte or VueJs;

  1. First you will want to install the module with NPM;
yarn add --dev sparticles
# or npm, if you prefer
npm install --save-dev sparticles
  1. Then import the module in to the app where you want to use it
import Sparticles from "sparticles";
  1. Finally initialise with vanillaJS
new Sparticles(node, { count: 100 }, 400);
  1. If you're using SvelteJS specifically, then your single-file component would look a little like this;
<script>

  import Sparticles from "sparticles";

  let sparticles,
      options = { color: "gold", shape: "star", speed: 50 };

  function addSparticles(node) {
    new Sparticles(node, options, 400);
  }

</script>

<main use:addSparticles>
</main>

usage

Providing that the script/module has been properly included, then it can be initialised by running the Sparticles() constructor;

let mySparticles = new Sparticles();

parameters

When initialising the Sparticles instance there are some parameters that can be supplied.

parameter type default description
node HTMLElement document.body the element in the DOM which the Sparticles will append to
options Object {} an object with all the options for the instance
width Number node.clientWidth the width of the canvas element
height Number node.clientWidth the height of the canvas element (defaults to width)

Leave the width/height properties empty to make the canvas resize to fit it's node


  • Supply nothing and get a default Sparticle instance on the <body>
let mySparticles = new Sparticles();
  • Supply a single HTMLElement parameter for a default Sparticle instance on that element
let mySparticles = new Sparticles(document.getElementById("myDiv"));
  • Supply a single Object parameter to customise a Sparticle instance on the <body>
let mySparticles = new Sparticles({ color: "red" });
  • Supply the width and height parameters for a custom size
let mySparticles = new Sparticles({ color: "red" }, 400, 300);

options

A brief look at all the options, with more details below.

option type default description
composition String source-over canvas globalCompositeOperation value for particles
count Number 50 number of particles on the canvas simultaneously
speed Number 10 default velocity of every particle
parallax Number 1 speed multiplier effect for larger particles (0 = none)
direction Number 180 default direction of particles in degrees (0 = ↑, 180 = ↓)
xVariance Number 2 random deviation of particles on x-axis from default direction
yVariance Number 2 random deviation of particles on y-axis from default direction
rotate Boolean true can particles rotate
rotation Number 1 default rotational speed for every particle
alphaSpeed Number 10 rate of change in alpha over time
alphaVariance Number 1 random deviation of alpha change
minAlpha Number 0 minumum alpha value of every particle
maxAlpha Number 1 maximum alpha value of every particle
minSize Number 1 minimum size of every particle
maxSize Number 10 maximum size of every particle
bounce Boolean false should the particles bounce off edge of canvas
drift Number 1 the "driftiness" of particles which have a horizontal/vertical direction
glow Number 0 the glow effect size of each particle
twinkle Boolean false particles to exhibit an alternative alpha transition as "twinkling"
style String fill fill style of particles (one of; "fill", "stroke" or "both")
shape String/Array circle shape of particles (any of; circle, square, triangle, diamond, line, image) or "random"
color String/Array random css color as string, or array of color strings (can also be "random")
randomColor Function randomHsl() function for returning a random color when the color is set as "random"
randomColorCount Number 3 number of random colours when the color is set as "random"
imageUrl String/Array if shape is "image", define an image url (can be data-uri, should be square (1:1 ratio))

composition

The global render composition when rendering particles on top of one-another. This, however, is a very expensive operation when set to anything other than the default value (source-over), and will ultimately degrade performance, especially with many particles.

Will accept any of the values that are provided as part of the Canvas API

count

  • Type: Number
  • Default: 50
  • Range: 1 - 10000

Simply the number of particles drawn to the screen.
Values over 500 may begin to degrade performance.

speed

  • Type: Number
  • Default: 10
  • Range: 0 - 100

The base value of speed across all particles. This is modified by options such as parallax and [x/y]Variance to determine the final velocity of each individual particle. A speed of 0 will render particles stationary before applying [x/y]Variance.

parallax

  • Type: Number
  • Default: 1
  • Range: 0 - 20

A value to apply more speed to larger particles, and less speed to smaller particles, creating an effect which makes larger particles appear closer to the screen.

direction

  • Type: Number
  • Default: 180
  • Range: 0 - 360

The base angle (in degrees) at which the particles are travelling, so long as they have a speed value.

xVariance

  • Type: Number
  • Default: 2
  • Range: 0 - 20

How much variance is applied between particles on the X axis. A value of 0 will make all particles appear to be going completely parallel, and look unnatural.

Can be used in conjunction with speed: 0; to make particles which float randomly in space.

yVariance

  • Type: Number
  • Default: 2
  • Range: 0 - 20

How much variance is applied between particles on the Y axis. A value of 0 will make all particles appear to be going completely parallel, and look unnatural.

Can be used in conjunction with speed: 0; to make particles which float randomly in space.

rotate

  • Type: Boolean
  • Default: true

Toggle whether the particles are allowed to spin about their axis.

rotation

  • Type: Number
  • Default: 1
  • Range: 0 - 20

How fast the particles can spin about their axis, this has a random multiplier added per-particle which prevents a completely unnatural spinning effect.

alphaSpeed

  • Type: Number
  • Default: 10
  • Range: 0 - 50

Rate of change for the alpha value of all particles. A higher value will encourage the particles to flicker like candle lights. A value of 0 will disable alpha change.

alphaVariance

  • Type: Number
  • Default: 2
  • Range: 0 - 10

How much variance is applied between each particle on the alpha value change over time. A value of 0 will cause all particles to change alpha at the same rate, a higher value will introduce more variety.

minAlpha

  • Type: Number
  • Default: 0
  • Range: -5 - +1

The minimum alpha value a particle can change to. The lower the number the longer it will stay invisible on the canvas, this could be useful in some scenarios where the particle should fade out for a while.

Must be lower than the maxAlpha value.

maxAlpha

  • Type: Number
  • Default: 0
  • Range: 0 - +5

The maximum alpha value a particle can change to. The higher the number the longer it will stay visible on the canvas, this could be useful in some scenarios where the particle should stay at max alpha for a time.

Must be higher than the minAlpha value.

minSize

  • Type: Number
  • Default: 1
  • Range: 1 - 100

Minimum size (in pixels) of the particles. The actual size of each particle is variable between the minSize and maxSize. If the minSize and maxSize are the same value; then all particles will be uniformly sized.

maxSize

  • Type: Number
  • Default: 10
  • Range: 1 - 100

Maximum size (in pixels) of the particles. The actual size of each particle is variable between the minSize and maxSize. If the minSize and maxSize are the same value; then all particles will be uniformly sized.

style

  • Type: String
  • Default: "fill"
  • Values: "fill", "stroke" or "both"

Particles can be either stroked (outline) or filled (solid) and this setting determines that style. It's also possible to randomize the style by choosing "both"

bounce

  • Type: Boolean
  • Default: false

Determine if particles should bounce off the boundaries of the canvas instead of resetting to the opposite side. This is best used with speed: 0; and a high value for [x/yVariance] to create a chaotic effect.

drift

  • Type: Number
  • Default: 1
  • Range: 1 - 20

How much a particle will "drift" as it falls. This is to imply a floatiness/wind effect like seen with snow flakes, or leaves. The drift will only apply if speed > 0 and direction is near to a 90degree value (0, 90, 180, 270)

glow

  • Type: Number
  • Default: 0
  • Range: 0 - 50

Glow (or shadow) effect around the particle. This will not affect images.

twinkle

  • Type: Boolean
  • Default: false

Apply a "twinkle" effect to the particle when changing alpha. This works best with a higher alphaSpeed and alphaVariance value.

color

  • Type: String / Array<String>
  • Default: "random"
  • Values: any valid css/html color string

A CSS/HTML color string to apply across all particles.
If an array of colors ([ "#ff0", "red", "hsl(10,50%,50%)" ]) is given, then each particle will be assigned a random color from the array. Additionally "random" can be used to assign any random color.

randomColor

  • Type: Function
  • Default: randomHSL()
  • Arguments: index, total

Custom function to use when generating random colors. The default function will return a fairly pleasant hsl() color with a high saturation and medium lightness. This can be overridden to suit your environment better. The two arguments (index, total) are Integers and allow for a little psuedo-randomizing.

example:

randomColor: function( index, total ) {
	return `hsl( ${index}, 80%, ${total - index}% )`;
}

randomColorCount

  • Type: Number
  • Default: 3
  • Range: 1 - 50

How many random colors to generate when color is random. The more colors generated the more chance there is of a performance penalty. It should be OK up to 50.

shape

  • Type: String / Array<String>
  • Default: "circle"
  • Values: "circle", "square", "triangle", "line", "diamond", "star" or "image"

Determine the shape of all the particles.
If an array of shapes ([ "circle", "star", "diamond" ]) is given, then each particle will be assigned a random shape form the array. Additionally "image" can be used to define a custom particle shape from an image when combined with imageUrl.

imageUrl

  • Type: String / Array<String>
  • Default: ""
  • Values: a valid url, or data-uri

Determine the custom image to be used for all the particles. If an array of urls ([ "http://my.image/shape.png", "http://my.svg/shape.svg" ]) is given, then each particle will be assigned a random image as it's shape from the array. This image should be a square (1:1)

methods

a few public methods can be accessed by storing a reference to the Sparticles instance and executed like so;

let mySparticles = new Sparticles();
mySparticles.destroy();
method description
destroy() destroy the Sparticles instance and remove event listeners
setCanvasSize( width, height ) set the new size of the canvas
resetSparticles() reset all the particles on the canvas

styling

If the Sparticles are simply going to be placed in a container (like a <div>) then the only styling that should be necessary is to set the width/height of the canvas using the width and height parameters.


To place the Sparticles in the background of a web-page, you'll need to add a container to the <body> which the canvas can sit in, then position it fixed:

<html>
  <body>
    <!-- your html web page content -->
    <div class="sparticles-container"></div>
  </body>
</html>

Then we set up the CSS styling for the Sparticles container depending on our situation:

/** 
  * we need to make sure the background doesn't have a
  * background color as we want to place the container
  * behind it on the z-axis!
  */
html { background: black; }
body { background: transparent; }

.sparticles-container {
  position: fixed;
  left: 0; right: 0;
  top: 0; bottom: 0;
  /**
   * z-index: -1; this makes the <body> still interactive 
   * by placing the sparticles behind the content
   */
  z-index: -1; 
}
/**
* we could a;so use "pointer-events: none;" in
* modern browsers to put the particles on top of all our content
*/
@supports ( pointer-events: none ) {
  .sparticles-container {
    z-index: 2;
    pointer-events: none;
  }
}

Finally we can initiate the Sparticles with the .sparticles-container as the DOM element it's bound to:

let container = document.querySelector(".sparticles-container");
let mySparticles = new Sparticles( container, { color: "red" });
// no need for width/height as the  canvas will fill 
// the container which is fixed to the viewport size

performance

Sparticles is really quite fast!

It was designed to be the smallest (within reason) and fastest performing particles script with such a large feature set!

Some other popular particle scripts will eat up to 50% of your CPU to render 1,000 particles. Sparticles will do the same while only using 9% and will run at a buttery 120fps if your device can refresh that fast!

Sparticles was built because other offerings in the space were either doing way too much and adding too many kb to load, or they were just too slow and unable to serve enough particles to lower end devices without chugging along jankily!

I used to get a lot of requests from Editorial/Content teams who wanted snow/sparkles/whatever on their home page during events, and I either had to reject because the plugins were killing our user's devices or accept and live knowing I've failed the users/customers! 😢 ~~ so Sparticles should fix that!

mobile

  • It's quite easy to achieve 120fps+ with over 1,000 particles on a decent computer!

  • But please remember your users are not all running super-computers with GPUs, they are probably on a mobile phone. Please avoid running heavy animations on phones! If you really have to then I'd advise reducing the particles down to 100 or less for a mobile device!

Please take care of your mobile users! They are probably your primary user if you're running a commercial or non-tech website! use a script like below to determine the amount of particles based on their device;

  let myElement = document.getElementById("myDiv");
  // PLEASE DON'T PUSH A TON OF ANIMATION ON MOBILES!
  let count = (/Mobi|Android/i.test(navigator.userAgent)) ? 100 : 500;
  let mySparticles = new Sparticles(myElement, { count: count }, 400);

why "Sparticles" ?

particles + [ speed ⚡ | snow ❄ | sparkles ✨ | stars ⭐ ] = Sparticles 🌈
Comments
  • kit keeps saying:

    kit keeps saying: "sparticles is incorrectly packaged. Please contact the package author to fix."

    hieeee!

    sveltekit keeps telling me to tell you this:

    sparticles is incorrectly packaged. Please contact the package author to fix.
    

    don't shoot me, I'm just the messenger 🤪

    opened by rchrdnsh 8
  • ReactJS Support

    ReactJS Support

    Hi, How to add this awesome library as a React component?

    particles.js

    import Sparticles from "sparticles";
    import React, { useState, useEffect } from "react";
    
    export default function Particles() {
      useEffect(() => {
        let mySparticles = new Sparticles({ color: "red", count: 10 }, 400, 300);
      });
      return <></>;
    }
    
    

    index.js

    import Particles from "./particles";
    export default function Nav() {
    
      return (
        <>
          <Particles />
          
        </>
      );
    }
    

    The particles did appear on my NextJS page but they always appear at the bottom. How to make them appear in the Header.

    opened by amanvermah 1
  • Sparticles in absolute positione div

    Sparticles in absolute positione div

    How I understand Sparticles can calculate width and height of target div has absolute position. I can setup width in pixels but I need widht 100%, height 100%

    question 
    opened by Air-Sidney 1
  • Bump lodash from 4.17.15 to 4.17.19

    Bump lodash from 4.17.15 to 4.17.19

    Bumps lodash from 4.17.15 to 4.17.19.

    Release notes

    Sourced from lodash's releases.

    4.17.16

    Commits
    Maintainer changes

    This version was pushed to npm by mathias, a new releaser for lodash since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump path-parse from 1.0.6 to 1.0.7 in /example/svelte

    Bump path-parse from 1.0.6 to 1.0.7 in /example/svelte

    Bumps path-parse from 1.0.6 to 1.0.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump path-parse from 1.0.6 to 1.0.7

    Bump path-parse from 1.0.6 to 1.0.7

    Bumps path-parse from 1.0.6 to 1.0.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Weird issue with shape resolution

    Weird issue with shape resolution

    There's two issues with the resolution of the generated off-screen canvases for shapes.

    1. it appears the offscreen canvas is slightly too small to contain the whole shape causing little cut-off parts on the bottom/right side of the shape (fig1,fig2)

    2. it appears that when the "min" value is larger than the "max" value for shape-size, the image gets blurry (fig3)

    fig1

    Screen Shot 2021-07-26 at 3 02 54 PM

    fig2

    Screen Shot 2021-07-26 at 3 00 29 PM

    fig3

    Screen Shot 2021-07-26 at 3 00 52 PM

    opened by simeydotme 0
  • Bump glob-parent from 5.1.1 to 5.1.2

    Bump glob-parent from 5.1.1 to 5.1.2

    Bumps glob-parent from 5.1.1 to 5.1.2.

    Release notes

    Sourced from glob-parent's releases.

    v5.1.2

    Bug Fixes

    Changelog

    Sourced from glob-parent's changelog.

    5.1.2 (2021-03-06)

    Bug Fixes

    6.0.0 (2021-05-03)

    ⚠ BREAKING CHANGES

    • Correct mishandled escaped path separators (#34)
    • upgrade scaffold, dropping node <10 support

    Bug Fixes

    • Correct mishandled escaped path separators (#34) (32f6d52), closes #32

    Miscellaneous Chores

    • upgrade scaffold, dropping node <10 support (e83d0c5)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump browserslist from 4.14.5 to 4.16.6

    Bump browserslist from 4.14.5 to 4.16.6

    Bumps browserslist from 4.14.5 to 4.16.6.

    Changelog

    Sourced from browserslist's changelog.

    4.16.6

    • Fixed npm-shrinkwrap.json support in --update-db (by Geoff Newman).

    4.16.5

    • Fixed unsafe RegExp (by Yeting Li).

    4.16.4

    • Fixed unsafe RegExp.
    • Added artifactory support to --update-db (by Ittai Baratz).

    4.16.3

    • Fixed --update-db.

    4.16.2

    4.16.1

    • Fixed Chrome 4 with mobileToDesktop (by Aron Woost).

    4.16

    • Add browserslist config query.

    4.15

    • Add TypeScript types (by Dmitry Semigradsky).

    4.14.7

    • Fixed Yarn Workspaces support to --update-db (by Fausto Núñez Alberro).
    • Added browser changes to --update-db (by @​AleksandrSl).
    • Added color output to --update-db.
    • Updated package.funding to have link to our Open Collective.

    4.14.6

    • Fixed Yarn support in --update-db (by Ivan Storck).
    • Fixed npm 7 support in --update-db.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump hosted-git-info from 2.8.8 to 2.8.9

    Bump hosted-git-info from 2.8.8 to 2.8.9

    Bumps hosted-git-info from 2.8.8 to 2.8.9.

    Changelog

    Sourced from hosted-git-info's changelog.

    2.8.9 (2021-04-07)

    Bug Fixes

    Commits
    Maintainer changes

    This version was pushed to npm by nlf, a new releaser for hosted-git-info since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump lodash from 4.17.20 to 4.17.21

    Bump lodash from 4.17.20 to 4.17.21

    Bumps lodash from 4.17.20 to 4.17.21.

    Commits
    • f299b52 Bump to v4.17.21
    • c4847eb Improve performance of toNumber, trim and trimEnd on large input strings
    • 3469357 Prevent command injection through _.template's variable option
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Change `count` logic to `density` logic

    Change `count` logic to `density` logic

    Hi,

    Reading the warning about mobile performance; it came to me the idea that count is practically a nonsense in a resizable environment.

    When implementing "snow" effect for example; what you want is a constant visual density, instead of a constant "number of flakes". Thus, I implemented a new density logic. I defaulted this to keep the same count as of today on a classic fullscreen desktop container (1400 * 660).

    It will recalculate the count, which is now dynamic based on density x resolution.

    It's also less dangerous on mobile; based on the naïve principle of "a larger screen resolution basically often mean a stronger GPU calculation capacities".


    This is a breaking change, non backward compatible

    opened by cyrilchapon 3
  • Bump terser from 4.8.0 to 4.8.1 in /example/svelte

    Bump terser from 4.8.0 to 4.8.1 in /example/svelte

    Bumps terser from 4.8.0 to 4.8.1.

    Changelog

    Sourced from terser's changelog.

    v4.8.1 (backport)

    • Security fix for RegExps that should not be evaluated (regexp DDOS)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump terser from 4.8.0 to 4.8.1

    Bump terser from 4.8.0 to 4.8.1

    Bumps terser from 4.8.0 to 4.8.1.

    Changelog

    Sourced from terser's changelog.

    v4.8.1 (backport)

    • Security fix for RegExps that should not be evaluated (regexp DDOS)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump svelte from 3.44.3 to 3.49.0 in /example/sveltekit

    Bump svelte from 3.44.3 to 3.49.0 in /example/sveltekit

    Bumps svelte from 3.44.3 to 3.49.0.

    Changelog

    Sourced from svelte's changelog.

    3.49.0

    • Improve performance of string escaping during SSR (#5701)
    • Add ComponentType and ComponentProps convenience types (#6770)
    • Add support for CSS @layer (#7504)
    • Export CompileOptions from svelte/compiler (#7658)
    • Fix DOM-less components not being properly destroyed (#7488)
    • Fix class: directive updates with <svelte:element> (#7521, #7571)
    • Harden attribute escaping during SSR (#7530)

    3.48.0

    • Allow creating cancelable custom events with createEventDispatcher (#4623)
    • Support {@const} tag in {#if} blocks #7241
    • Return the context object in setContext #7427
    • Allow comments inside {#each} blocks when using animate: (#3999)
    • Fix |local transitions in {#key} blocks (#5950)
    • Support svg namespace for {@html} (#7002, #7450)
    • Fix {@const} tag not working inside a component when there's no let: #7189
    • Remove extraneous leading newline inside <pre> and <textarea> (#7264)
    • Fix erroneous setting of textContent for \<template> elements (#7297)
    • Fix value of let: bindings not updating in certain cases (#7440)
    • Fix handling of void tags in <svelte:element> (#7449)
    • Fix handling of boolean attributes in <svelte:element> (#7478)
    • Add special style scoping handling of [open] selectors on <dialog> elements (#7495)

    3.47.0

    • Add support for dynamic elements through <svelte:element> (#2324)
    • Miscellaneous variable context fixes in {@const} (#7222)
    • Fix {#key} block not being reactive when the key variable is not otherwise used (#7408)
    • Add Symbol as a known global (#7418)

    3.46.6

    • Actually include action TypeScript interface in published package (#7407)

    3.46.5

    • Add TypeScript interfaces for typing actions (#6538)
    • Do not generate unused-export-let warning inside <script context="module"> blocks (#7055)
    • Do not collapse whitespace-only CSS vars (#7152)
    • Add aria-description to the list of allowed ARIA attributes (#7301)
    • Fix attribute escaping during SSR (#7327)
    • Prevent .innerHTML optimization from being used when style: directive is present (#7386)

    3.46.4

    • Avoid maximum call stack size exceeded errors on large components (#4694)
    • Preserve leading space with preserveWhitespace: true (#4731)

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump svelte from 3.44.3 to 3.49.0 in /example/svelte

    Bump svelte from 3.44.3 to 3.49.0 in /example/svelte

    Bumps svelte from 3.44.3 to 3.49.0.

    Changelog

    Sourced from svelte's changelog.

    3.49.0

    • Improve performance of string escaping during SSR (#5701)
    • Add ComponentType and ComponentProps convenience types (#6770)
    • Add support for CSS @layer (#7504)
    • Export CompileOptions from svelte/compiler (#7658)
    • Fix DOM-less components not being properly destroyed (#7488)
    • Fix class: directive updates with <svelte:element> (#7521, #7571)
    • Harden attribute escaping during SSR (#7530)

    3.48.0

    • Allow creating cancelable custom events with createEventDispatcher (#4623)
    • Support {@const} tag in {#if} blocks #7241
    • Return the context object in setContext #7427
    • Allow comments inside {#each} blocks when using animate: (#3999)
    • Fix |local transitions in {#key} blocks (#5950)
    • Support svg namespace for {@html} (#7002, #7450)
    • Fix {@const} tag not working inside a component when there's no let: #7189
    • Remove extraneous leading newline inside <pre> and <textarea> (#7264)
    • Fix erroneous setting of textContent for \<template> elements (#7297)
    • Fix value of let: bindings not updating in certain cases (#7440)
    • Fix handling of void tags in <svelte:element> (#7449)
    • Fix handling of boolean attributes in <svelte:element> (#7478)
    • Add special style scoping handling of [open] selectors on <dialog> elements (#7495)

    3.47.0

    • Add support for dynamic elements through <svelte:element> (#2324)
    • Miscellaneous variable context fixes in {@const} (#7222)
    • Fix {#key} block not being reactive when the key variable is not otherwise used (#7408)
    • Add Symbol as a known global (#7418)

    3.46.6

    • Actually include action TypeScript interface in published package (#7407)

    3.46.5

    • Add TypeScript interfaces for typing actions (#6538)
    • Do not generate unused-export-let warning inside <script context="module"> blocks (#7055)
    • Do not collapse whitespace-only CSS vars (#7152)
    • Add aria-description to the list of allowed ARIA attributes (#7301)
    • Fix attribute escaping during SSR (#7327)
    • Prevent .innerHTML optimization from being used when style: directive is present (#7386)

    3.46.4

    • Avoid maximum call stack size exceeded errors on large components (#4694)
    • Preserve leading space with preserveWhitespace: true (#4731)

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump minimist from 1.2.5 to 1.2.6

    Bump minimist from 1.2.5 to 1.2.6

    Bumps minimist from 1.2.5 to 1.2.6.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(1.1.0)
Javascript library to generate an infinite stream or a burst of image based particles on HTML canvas.

spxparticles Stream or a burst of image particles on HTML canvas Simple Javascript library for generating an infinine stream or a burst of image based

Tuomo Kulomaa 3 Dec 3, 2020
React particles animation background component

particles-bg React component for particles backgrounds This project refers to the source code of the Proton official website, I packaged it into a com

lindelof 561 Dec 24, 2022
A vue.js particles animation background component

particles-bg-vue A vue.js particles animation background component. Use it to make your website look cool. Check it out if you want to use it in React

lindelof 206 Dec 24, 2022
A bursting particles effects buttons component ✨💥❄️🌋

vue-particle-effect-buttons (demo) Bursting particle effect buttons for Vue. This library is a Vue portal of an awesome Codrops Article by Luis Manuel

Vincent Guo 252 Nov 11, 2022
A little library that can be used for bursting particles effects on buttons and other elements

Particle Effects for Buttons Bursting particles effects for buttons. By Luis Manuel. Article on Codrops Demo Credits anime.js Basic usage The Particle

Codrops 1.2k Jan 1, 2023
A vanishing effect for particles and magic lovers using Threejs, GSAP and custom shaders.

Three.js Experiment - Vanishing Suzanne Demo version Get started First, you need nodejs on your computer to build the assets. Install dependencies: np

Arno Di Nunzio 120 Dec 23, 2022
Warp drive is a lightweight jQuery plugin that helps you create a cool, interactive, configurable, HTML5 canvas based warp drive/starfield effect.

Warp drive jQuery plugin (jquery-warpdrive-plugin) Preview Description Warp drive is a lightweight jQuery plugin that helps you create a cool, interac

Niklas 51 Nov 15, 2022
A lightweight, efficient and easy-to-use Canvas library for building some cool particle effects.

JParticles · 中文 | English 官网:jparticles.js.org 特效列表 粒子运动 波纹运动 波纹进度条 雪花飘落 线条动画 介绍 JParticles(JavaScript Particles 的缩写)是一款基于 Canvas 的不依赖于其他库的轻量级 JavaScr

花祁 466 Dec 27, 2022
Add a retro/vintage effect to images using the HTML5 canvas element

vintageJS Add a retro/vintage effect to images using the HTML5 canvas element. Installation $ npm install vintagejs How to use vintagejs is a functio

Robert Fleischmann 829 Dec 25, 2022
image/video/content slideshow engine providing high quality animation effects including Kenburns Effect and GLSL Transitions.

Diaporama Diaporama is an image/video/content slideshow engine providing high quality animation effects including Kenburns effect and GLSL Transitions

Gaëtan Renaudeau 797 Nov 26, 2022
⌨️ Lightweight $.Hypertext.Typewriter

⚠️ iOS 13.3 note (April 2020) beep[:true] freezes the typewriter, read more: issue #11 Nice features ?? full HTML support beep-beep Hypertypin' Markup

Benjamin Lips 309 Dec 22, 2022
fakeLoader.js is a lightweight jQuery plugin that helps you create an animated spinner with a fullscreen loading mask to simulate the page preloading effect.

What is fakeLoader.js fakeLoader.js is a lightweight jQuery plugin that helps you create an animated spinner with a fullscreen loading mask to simulat

João Pereira 721 Dec 6, 2022
Lightweight, simple to use jQuery plugin to animate SVG paths

jQuery DrawSVG This plugin uses the jQuery built-in animation engine to transition the stroke on every <path> inside the selected <svg> element, using

Leonardo Santos 762 Dec 20, 2022
Lightweight and fast Particle library written in JavaScript

Spark Particles Lightweight and fast Particle library written in JavaScript Zero Dependencies! Basic example Installation npm i spark-particles --save

Yury Petrov 11 May 9, 2022
Performant Particles: 3 to 6 times faster than tsParticles or Particles.js

perParticles Performant Particles is a demo that was written to handle a comparatively large amount of particles without slowing down to the same degr

Alaric von Teplitz 28 Oct 2, 2022
Responsive, interactive and more accessible HTML5 canvas elements. Scrawl-canvas is a JavaScript library designed to make using the HTML5 canvas element a bit easier, and a bit more fun!

Scrawl-canvas Library Version: 8.5.2 - 11 Mar 2021 Scrawl-canvas website: scrawl-v8.rikweb.org.uk. Do you want to contribute? I've been developing thi

Rik Roots 227 Dec 31, 2022
Javascript Canvas Library, SVG-to-Canvas (& canvas-to-SVG) Parser

Fabric.js Fabric.js is a framework that makes it easy to work with HTML5 canvas element. It is an interactive object model on top of canvas element. I

Fabric.js 23.6k Jan 3, 2023
Javascript Canvas Library, SVG-to-Canvas (& canvas-to-SVG) Parser

Fabric.js Fabric.js is a framework that makes it easy to work with HTML5 canvas element. It is an interactive object model on top of canvas element. I

Fabric.js 23.6k Jan 3, 2023
Happy Birthday is a web-based party live background generated by CANVAS powered by JavaScript. This show a lot of random colorize particles in the background.

Happy BirthDay JS Happy Birthday is a web-based party live background generated by CANVAS powered by JavaScript. This show a lot of random colorize pa

Max Base 9 Oct 29, 2022
Javascript library to generate an infinite stream or a burst of image based particles on HTML canvas.

spxparticles Stream or a burst of image particles on HTML canvas Simple Javascript library for generating an infinine stream or a burst of image based

Tuomo Kulomaa 3 Dec 3, 2020