The complete code of this effect is as follows. Save the code to an HTML file and open it to view the effect. The flame will follow the cursor: Copy codeThe code is as follows: HTML5 Canvas flame effect<br>body{margin: 0; padding: 0;}<br>#canvas-keleyi- com {display: block;}<br> canvas><br>window.onload = function(){<br>var keleyi_canvas = document.getElementById("canvas-kel" "eyi-com"); <br>var ctx = keleyi_canvas.getContext("2d");<br>var W = window.innerWidth, H = window.innerHeight;<br>keleyi_canvas.width = W;<br>keleyi_canvas.height = H;< ;/p> <p>var particles = [];<br>var mouse = {};</p> <p>//Lets create some particles now<br>var particle_count = 100;<br>for(var i = 0; i < particle_count; i )<br>{<br>particles.push(new particle( ));<br>}<br>keleyi_canvas.addEventListener('mousemove', track_mouse, false);</p> <p>function track_mouse(e)<br>{<br>mouse.x = e.pageX;<br>mouse.y = e.pageY;<br>}</p> <p>function particle()<br>{<br>this.speed = {x: -2.5 Math.random()*5, y: -15 Math.random()*10};<br>// location = mouse coordinates<br>//Now the flame follows the mouse coordinates<br>if(mouse.x && mouse.y)<br>{<br>this.location = {x: mouse.x, y: mouse .y};<br>}<br>else<br>{<br>this.location = {x: W/2, y: H/2};<br>}<br>//radius range = 10 -30<br>this.radius = 10 Math.random()*20;<br>//life range = 20-30<br>this.life = 20 Math.random()*10;<br>this. remaining_life = this.life;<br>//colors<br>this.r = Math.round(Math.random()*255);<br>this.g = Math.round(Math.random()*255 );<br>this.b = Math.round(Math.random()*255);<br>}</p> <p>function draw()<br>{<br>ctx.globalCompositeOperation = "source-over";<br>ctx.fillStyle = "black";<br>ctx.fillRect(0, 0, W, H );<br>ctx.globalCompositeOperation = "lighter";</p> <p>for(var i = 0; i < particles.length; i )<br>{<br>var p = particles[i];<br>ctx.beginPath();<br>p.opacity = Math.round(p.remaining_life/p.life*100)/100<br>var gradient = ctx.createRadialGradient(p.location.x, p.location.y, 0, p.location.x, p.location .y, p.radius);<br>gradient.addColorStop(0, "rgba(" p.r ", " p.g ", " p.b ", " p.opacity ")");<br>gradient.addColorStop(0.5, "rgba(" p.r ", " p.g ", " p.b ", " p.opacity ")");<br>gradient.addColorStop(1, "rgba(" p.r ", " p.g ", " p.b ", 0) ");<br>ctx.fillStyle = gradient;<br>ctx.arc(p.location.x, p.location.y, p.radius, Math.PI*2, false);<br>ctx.fill ();</p> <p><br>p.remaining_life--;<br>p.radius--;<br>p.location.x = p.speed.x;<br>p.location.y = p.speed. y;</p> <p>if(p.remaining_life < 0 || p.radius < 0)<br>{<br>particles[i] = new particle();<br>}<br>}<br>} </p> <p>setInterval(draw, 86);<br>}<br>