JSFiddle - React, Tailwind, and code Playground

by Gary Pyne

HTML

<canvas id="confetti" width="1" height="1"></canvas>
    
    test
    
<button onclick="confet()">
click me
</button>

<script type="text/javascript">

function confet(){
			var retina = window.devicePixelRatio,

				// Math shorthands
				PI = Math.PI,
				sqrt = Math.sqrt,
				round = Math.round,
				random = Math.random,
				cos = Math.cos,
				sin = Math.sin,

				// Local WindowAnimationTiming interface
				rAF = window.requestAnimationFrame,
				cAF = window.cancelAnimationFrame || window.cancelRequestAnimationFrame;

			// Local WindowAnimationTiming interface polyfill
			(function (w) {
				/**
				* Fallback implementation.
				*/
				var prev = new Date().getTime();
				function fallback(fn) {
					var curr = _now();
					var ms = Math.max(0, 16 - (curr - prev));
					var req = setTimeout(fn, ms);
					prev = curr;
					return req;
				}

				/**
				* Cancel.
				*/
				var cancel = w.cancelAnimationFrame
					|| w.webkitCancelAnimationFrame
					|| w.clearTimeout;

				rAF = w.requestAnimationFrame
					|| w.webkitRequestAnimationFrame
					|| fallback;

				cAF = function(id){
					cancel.call(w, id);
				};
			}(window));

			document.addEventListener("DOMContentLoaded", function() {
				var speed = 50,
					duration = (1.0 / speed),
					confettiRibbonCount = 11,
					ribbonPaperCount = 30,
					ribbonPaperDist = 8.0,
					ribbonPaperThick = 8.0,
					confettiPaperCount = 95,
					DEG_TO_RAD = PI / 180,
					RAD_TO_DEG = 180 / PI,
					colors = [
						["#df0049", "#660671"],
						["#00e857", "#005291"],
						["#2bebbc", "#05798a"],
						["#ffd200", "#b06c00"]
					];

				function Vector2(_x, _y) {
					this.x = _x, this.y = _y;
					this.Length = function() {
						return sqrt(this.SqrLength());
					}
					this.SqrLength = function() {
						return this.x * this.x + this.y * this.y;
					}
					this.Add = function(_vec) {
						this.x += _vec.x;
						this.y += _vec.y;
					}
					this.Sub = function(_vec) {
						this.x -=...

CSS

html, body {
				margin: 0;
				padding: 0;
				background: white;
				height: 100%;
				width: 100%;
			}
			#confetti{
				position: absolute;
				left: 0;
				top: 0;
				height: 100%;
				width: 100%;
			}