<button>It's time for Confetti!</button>
html,
body {
  margin: 0;
  padding: 0;
  width: 100wh;
  height: 100vh;
  background: black;
  font-weight: 100;
  font-family: sans-serif;
}

body {
  display: flex;
  align-items: flex-end;
  justify-content: center;
}

button {
  position: relative;
  bottom: 20%;
  font-size: 24pt;
  letter-spacing: 3px;
  background: #9b1c2c;
  border: none;
  border-radius: 5px;
  color: white;
  cursor: pointer;
  transition: all 0.4s;
  padding: 10px 20px;
}

button:hover {
  color: #041e42;
}

button:focus {
  outline: none;
}
import confetti from "https://cdn.skypack.dev/canvas-confetti";
const doItNow = (evt, hard) => {
  const direction = Math.sign(lastX - evt.clientX);
  lastX = evt.clientX;
  const particleCount = hard ? r(122, 245) : r(2, 15);
  confetti({
    particleCount,
    angle: r(90, 90 + direction * 30),
    spread: r(45, 80),
    origin: {
      x: evt.clientX / window.innerWidth,
      y: evt.clientY / window.innerHeight
    }
  });
};
const doIt = (evt) => {
  doItNow(evt, false);
};

const doItHard = (evt) => {
  doItNow(evt, true);
};

let lastX = 0;
const butt = document.querySelector("button");
butt.addEventListener("mousemove", doIt);
butt.addEventListener("click", doItHard);

function r(mi, ma) {
  return parseInt(Math.random() * (ma - mi) + mi);
}
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.