JSFiddle - React, Tailwind, and code Playground

by piiantom

HTML

<div class="container">
<div class="btn ripple" ripple="true">Click here<span class="ripple"></span></div>
</div>

CSS

.btn {
  border: none;
  padding: 20px;
  margin: 10px;
  font-size: 14px;
  outline: 0;
  box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, .2);
  border-radius: 4px;
  text-align: center;
  width: 200px;
  transition: all 250ms;
  cursor: pointer;
  background-color: #3b59ce;
  color: #fff;
  text-transform: uppercase;
  font-family: Arial;
  user-select: none;
}
.btn:active {
  box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, .3);
}
[ripple] {
  position: relative;
  overflow: hidden;
}
[ripple] .ripple {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  opacity: 0;
  background-color: #fff;
  border-radius: 100%;
  width: 10px;
  height: 10px;
  transform: translate(-50%, -50%) scale(0);
}
[ripple] .ripple.show{
    opacity: 0.3;
    transition: transform 450ms, opacity 150ms;
    transform: translate(-50%, -50%) scale(40);
}
[ripple] .ripple.show.hide{
    opacity: 0;
    transform: translate(-50%, -50%) scale(60);
}

JavaScript

showRipple = function(e) {
  var ripple = this;
  var size = ripple.offsetWidth;
  var pos = ripple.getBoundingClientRect();

	var x = e.pageX - pos.left;
	var y = e.pageY - pos.top;
  var style = 'top:' + y + 'px; left: ' + x + 'px;';
	var rippler = ripple.getElementsByClassName("ripple")[0];
  rippler.classList.remove("show");
	rippler.classList.remove("hide");

  

	rippler.setAttribute('style', style);
	rippler.classList.add("show");
};

hideRipple = function() {
  var ripple = this;
  setTimeout(function(){
    var rippler = ripple.getElementsByClassName("ripple")[0];
    rippler.classList.add("hide");
    setTimeout(function(){
       rippler.classList.remove("show");
       rippler.classList.remove("hide");
    }, 250);
	}, 250);
}

ripples = document.querySelectorAll('[ripple]');

for (i = 0, len = ripples.length; i < len; i++) {
  ripple = ripples[i];
  ripple.addEventListener('mousedown', showRipple);
  ripple.addEventListener('mouseup', hideRipple);
}