"Falling Confetti in Loop"
Bootstrap 4.1.1 Snippet by abhijeetka

<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <!------ Include the above in your HEAD tag ----------> <div class="container w-100 h-100 d-flex align-items-center justify-content-center"> <!--<button onclick="startConfetti();" class="btn btn-danger">Start</button> <button onclick="stopConfetti();" class="btn btn-info">Stop</button> <button onclick="toggleConfetti();" class="btn btn-warning">Toggle</button>--> <div class="card my-auto py-5 text-center shadow mx-auto w-50 d-flex position-absolute"> <span><i class="mb-3 d-block">||    Om Sai Ram    ||</i></span> <h3 class="card-title">Hello My <i class="fa fa-heart text-danger"></i></h3> <h1 class="my-auto text-center"><i class="far fa-icons text-danger"></i> Happy Rose Day</h1> <center><img crossorigin="anonymous" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Emojione_1F337.svg/320px-Emojione_1F337.svg.png" class="svg" width="111" height="111"></center> </div> </div>
@import url('https://fonts.googleapis.com/css?family=Montserrat:200,300,400,500,600&display=swap'); @import url('https://use.fontawesome.com/releases/v5.0.1/css/all.css'); body { min-height: 100vh; overflow: hidden; background:url(https://cmkt-image-prd.freetls.fastly.net/0.1.0/ps/6519889/600/400/m2/fpnw/wm0/12-.jpg?1560246853&s=212715eb92104b92e3873af4fad9457e) no-repeat 0 0/100%; } .container { margin: 0 auto; text-align: center; } h1{font-family: 'Montserrat', sans-serif;font-weight: 200; font-style: normal;} .card{ top:calc(100% - 75%); background-image: linear-gradient(to top, rgba(255, 132, 228, 0.78) 0%, rgba(214, 232, 254, 0.78) 100%); }
var maxParticleCount=150;var particleSpeed=2;var startConfetti;var stopConfetti;var toggleConfetti;var removeConfetti;(function(){startConfetti=startConfettiInner;stopConfetti=stopConfettiInner;toggleConfetti=toggleConfettiInner;removeConfetti=removeConfettiInner;var colors=["DodgerBlue","OliveDrab","Gold","Pink","SlateBlue","LightBlue","Violet","PaleGreen","SteelBlue","SandyBrown","Chocolate","Crimson"] var streamingConfetti=false;var animationTimer=null;var particles=[];var waveAngle=0;function resetParticle(particle,width,height){particle.color=colors[(Math.random()*colors.length)|0];particle.x=Math.random()*width;particle.y=Math.random()*height-height;particle.diameter=Math.random()*10+5;particle.tilt=Math.random()*10-10;particle.tiltAngleIncrement=Math.random()*0.07+0.05;particle.tiltAngle=0;return particle;} function startConfettiInner(){var width=window.innerWidth;var height=window.innerHeight;window.requestAnimFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){return window.setTimeout(callback,16.6666667);};})();var canvas=document.getElementById("confetti-canvas");if(canvas===null){canvas=document.createElement("canvas");canvas.setAttribute("id","confetti-canvas");canvas.setAttribute("style","display:block;z-index:999999;pointer-events:none");document.body.appendChild(canvas);canvas.width=width;canvas.height=height;window.addEventListener("resize",function(){canvas.width=window.innerWidth;canvas.height=window.innerHeight;},true);} var context=canvas.getContext("2d");while(particles.length<maxParticleCount) particles.push(resetParticle({},width,height));streamingConfetti=true;if(animationTimer===null){(function runAnimation(){context.clearRect(0,0,window.innerWidth,window.innerHeight);if(particles.length===0) animationTimer=null;else{updateParticles();drawParticles(context);animationTimer=requestAnimFrame(runAnimation);}})();}} function stopConfettiInner(){streamingConfetti=false;} function removeConfettiInner(){stopConfetti();particles=[];} function toggleConfettiInner(){if(streamingConfetti) stopConfettiInner();else startConfettiInner();} function drawParticles(context){var particle;var x;for(var i=0;i<particles.length;i++){particle=particles[i];context.beginPath();context.lineWidth=particle.diameter;context.strokeStyle=particle.color;x=particle.x+particle.tilt;context.moveTo(x+particle.diameter/2,particle.y);context.lineTo(x,particle.y+particle.tilt+particle.diameter/2);context.stroke();}} function updateParticles(){var width=window.innerWidth;var height=window.innerHeight;var particle;waveAngle+=0.01;for(var i=0;i<particles.length;i++){particle=particles[i];if(!streamingConfetti&&particle.y<-15) particle.y=height+100;else{particle.tiltAngle+=particle.tiltAngleIncrement;particle.x+=Math.sin(waveAngle);particle.y+=(Math.cos(waveAngle)+particle.diameter+particleSpeed)*0.5;particle.tilt=Math.sin(particle.tiltAngle)*15;} if(particle.x>width+20||particle.x<-20||particle.y>height){if(streamingConfetti&&particles.length<=maxParticleCount) resetParticle(particle,width,height);else{particles.splice(i,1);i--;}}}}})(); window.onload = startConfetti();

Related: See More


Questions / Comments: