Вы должны анимировать высоту и ширину вместо масштаба.
И чтобы держать его по центру, вы должны перевести X и Y
Таким образом, код будет выглядеть так:
$(document).on({
click: function (e) {
var d = document.createElement('div');
d.className = 'clickEffect';
d.style.width = '1px';
d.style.height = '1px';
d.style.top = `${e.clientY}px`;
d.style.left = `${e.clientX}px`;
document.body.appendChild(d);
d.addEventListener('animationend', (() => {
d.parentElement.removeChild(d);
}).bind(this));
}
});
div.clickEffect {
position: fixed;
border:1px solid #000;
border-radius: 50%;
z-index: 99999;
animation: clickEffect 0.5s ease-out;
}
@keyframes clickEffect {
0% {
opacity: 1;
}
100% {
opacity: 0.5;
transform: translateX(-20px) translateY(-20px);
width: 40px;
height: 40px;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
</body>
</html>