Saturday, October 25, 2025
HomeLanguagesJavascriptExplosion Animation in Canvas

Explosion Animation in Canvas

In this article, we will create an explosion animation using canvas in HTML.

Approach: At first, we have to create a canvas element in HTML and get its reference in JavaScript. All the elements and animations are controlled using JavaScript functions. Some steps required are:

  • Use the canvas methods to get the canvas and the context.
  • Decide the color, pattern, and gradient for text and particle objects.
  • Decide and draw the shape for animation or frame rendering
  • Clear the previous canvas.
  • Save the canvas after transformations for the original state
  • Restore the canvas before drawing a new frame
    We can create many particles and animate them in random directions which fades out after some time.

Example: 

HTML




<!DOCTYPE html>
<html>
<head>
    <title>Explosion Animation</title>
</head>
  
<body>
    <canvas id="myCanvas"></canvas>
</body>
</html>


CSS




<style>
    * {
            padding: 0;
            margin: 0;
            box-sizing: border-box;
                  ;
       }
      
    body {
              overflow: hidden;
          }
</style>


Javascript




<script>
    /* Get the canvas  */
    var canvas = document.getElementById("myCanvas");
      
    /* Get the height and width of the window */
    canvas.height = window.innerHeight;
    canvas.width = window.innerWidth;
      
    /* Get the 2D context of the canvas  */
    var ctx = canvas.getContext("2d");
      
    /* Fills or sets the color,gradient,pattern */
    ctx.fillStyle = "white";
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    ctx.font = "50px Arial";
    ctx.fillStyle = "green";
      
    /* Writes the required text  */
    ctx.fillText("GFG", 500, 350)
    let particles = [];
      
    /* Initialize particle object  */
    class Particle {
        constructor(x, y, radius, dx, dy) {
            this.x = x;
            this.y = y;
            this.radius = radius;
            this.dx = dx;
            this.dy = dy;
            this.alpha = 1;
        }
        draw() {
            ctx.save();
            ctx.globalAlpha = this.alpha;
            ctx.fillStyle = 'green';
              
            /* Begins or reset the path for 
               the arc created */
            ctx.beginPath();
              
            /* Some curve is created*/
            ctx.arc(this.x, this.y, this.radius, 
                    0, Math.PI * 2, false);
      
            ctx.fill();
              
            /* Restore the recent canvas context*/
            ctx.restore();
        }
        update() {
            this.draw();
            this.alpha -= 0.01;
            this.x += this.dx;
            this.y += this.dy;
        }
    }
      
    /* Timer is set for particle push 
        execution in intervals*/
    setTimeout(() => {
        for (i = 0; i <= 150; i++) {
            let dx = (Math.random() - 0.5) * (Math.random() * 6);
            let dy = (Math.random() - 0.5) * (Math.random() * 6);
            let radius = Math.random() * 3;
            let particle = new Particle(575, 375, radius, dx, dy);
              
            /* Adds new items like particle*/
            particles.push(particle);
        }
        explode();
    }, 3000);
      
    /* Particle explosion function */
    function explode() {
      
        /* Clears the given pixels in the rectangle */
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.fillStyle = "white";
        ctx.fillRect(0, 0, canvas.width, canvas.height);
        particles.forEach((particle, i) => {
                if (particle.alpha <= 0) {
                    particles.splice(i, 1);
                } else particle.update()
            })
              
            /* Performs a animation after request*/
        requestAnimationFrame(explode);
    }
</script>


Output:

Explosion Animation

Whether you’re preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, neveropen Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we’ve already empowered, and we’re here to do the same for you. Don’t miss out – check it out now!
RELATED ARTICLES

Most Popular

Dominic
32361 POSTS0 COMMENTS
Milvus
88 POSTS0 COMMENTS
Nango Kala
6728 POSTS0 COMMENTS
Nicole Veronica
11892 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11954 POSTS0 COMMENTS
Shaida Kate Naidoo
6852 POSTS0 COMMENTS
Ted Musemwa
7113 POSTS0 COMMENTS
Thapelo Manthata
6805 POSTS0 COMMENTS
Umr Jansen
6801 POSTS0 COMMENTS