<div class="btn-wrapper">
  <button type="button" class="btn">touch me</button>
</div>
<canvas id="canvas"></canvas>
@import 'https://fonts.googleapis.com/css?family=Source+Sans+Pro:300';

*{
  font-family: 'Source Sans Pro', sans-serif;
  box-sizing: border-box;
  font-weight: 300;
  padding: 0;
  margin: 0;
}

.btn-wrapper{
  position: fixed;
  top: calc(50% - 22px);
  left: 0;
  width: 100%;
  text-align: center;
}

.btn{
  display: inline-block;
  box-shadow: none;
  appearance: none;
  border: 0;
  outline: 0;
  background-color: rgb(0, 240, 168);
  height: 45px;
  line-height: 42px;
  padding: 0 30px;
  font-size: 20px;
  border-radius: 30px;
  color: rgb(40, 45, 50);
  cursor: pointer;
  transition: all .5s;
  transition-timing-function: cubic-bezier(.2, 3, .4, 1);
  user-select: none;
  
  &:hover{
    transform: scale(1.1, 1.1);
  }
  
  &:active{
    transform: scale(1.05, 1.05);
  }
}
View Compiled
var c = document.getElementById('canvas');
var ctx = c.getContext('2d');
var btn = document.getElementsByClassName('btn')[0];

c.width = window.innerWidth;
c.height = window.innerHeight;

var mouseX = c.width / 2;
var mouseY = c.height / 2;
var txtPosition = 0;

var particles = [];

btn.addEventListener('mouseup', function(e){
  mouseX = e.clientX;
  mouseY = e.clientY;
  
  createParticles();
  changeText();
});

setTimeout(function(){
  createParticles();
}, 250);

draw();

function draw(){
  
  drawBg();
  incParticles();
  drawParticles();
  
  window.requestAnimationFrame(draw);
  
}

function drawBg(){
  ctx.rect(0, 0, c.width, c.height);
  ctx.fillStyle = "rgb(40, 45, 50)";
  ctx.fill();
}

function drawParticles(){
  for(i = 0; i < particles.length; i++){
    ctx.beginPath();
    ctx.arc(particles[i].x,
           particles[i].y,
           particles[i].size,
           0,
           Math.PI * 2);
    ctx.fillStyle = particles[i].color;
    ctx.closePath();
    ctx.fill();
  }
}

function incParticles(){
  for(i = 0; i < particles.length; i++){
    particles[i].x += particles[i].velX;
    particles[i].y += particles[i].velY;
    
    particles[i].size = Math.max(0, (particles[i].size - .05));
    
    if(particles[i].size === 0){
      particles.splice(i, 1);
    }
  }
}

function createParticles(){
  for(i = 0; i < 30; i++){
    particles.push({
      x: mouseX,
      y: mouseY,
      size: parseInt(Math.random() * 10),
      color: 'rgb(' + ranRgb() + ')',
      velX: ranVel(),
      velY: ranVel()
    });
  }
}

function ranRgb(){
  var colors = [
    '255, 122, 206',
    '0, 157, 255',
    '0, 240, 168',
    '0, 240, 120'
  ];
  
  var i = parseInt(Math.random() * 10);
  
  return colors[i];
}

function ranVel(){
  var vel = 0;
  
  if(Math.random() < 0.5){
    vel = Math.abs(Math.random());
  } else {
    vel = -Math.abs(Math.random());
  }
      
  return vel;
}

// Text

var btnTxt = [
  'hehe',
  'ouch!',
  'sparkles!',
  'ooh',
  'oooooh',
  'ooooooooooh',
  'HARDER',
  'softer',
  'tenderly',
  'this is getting weird',
  'please stop',
  '"gags"',
  'woof',
  'meow',
  '@Lewitje'
];

function changeText(){
  if(txtPosition !== btnTxt.length){
    btn.innerHTML = btnTxt[txtPosition];
    txtPosition += 1;
  }
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.