JSFiddle - React, Tailwind, and code Playground
HTML
<html>
<body>
<div id="container">
<div
id="item"
onclick="playClickAnim(1)"
onmouseenter="playHooverAnim(1)"
onmouseout="playHooverAnim(-1)" />
</div>
</body>
</html>
CSS
#container {
background-color: black;
width: 100%;
height: 100%;
position: absolute;
top:0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
#item {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100px;
height: 100px;
background-color: red;
}
JavaScript
var item = document.getElementById("item");
var introFrames = [
{"transform": "translate(-50%, -50%) scale(0,0) translate(0, 0)"},
{"transform": "translate(-50%, -50%) scale(1,1) translate(0, 0)"}
]
var introOpts = {
"duration": 5000,
"iterations": 1,
"easing": "cubic-bezier(0.175, 0.885, 0.32, 1.275)"
}
var introAnim = item.animate(introFrames, introOpts);
introAnim.pause();
var hooverFrames = [
{"transform": "translate3d(0, 0, 0)"},
{"transform": "translate3d(-50%, -50%, 0)"}
]
var hooverOpts = {
"duration": 1000,
"iterations": 1,
"easing": "cubic-bezier(0.175, 0.885, 0.32, 1.275)",
"fill": "both",
"composite": 'add'
}
var hooverAnim = item.animate(hooverFrames, hooverOpts);
hooverAnim.pause();
var clickFrames = [
{"transform": "translate(0, 0)"},
{"transform": "translate(-50%, 0)"},
{"transform": "translate(0, 0)"}
]
var clickOpts = {
"duration": 500,
"iterations": 1,
"easing": "cubic-bezier(0.175, 0.885, 0.32, 1.275)",
"fill": "both",
"composite": 'add'
}
var clickAnim = item.animate(clickFrames, clickOpts);
clickAnim.pause();
introAnim.play();
function playHooverAnim(direction) {
console.log('HOOVER', direction);
hooverAnim.playbackRate = direction;
hooverAnim.play();
}
function playClickAnim() {
console.log('CLICK');
clickAnim.play();
}