JSFiddle - React, Tailwind, and code Playground
by HDL52
HTML
<body>
<div id="element"></div>
</body>
CSS
body {
width: 100vw;
height: 100vh;
transform-style: preserve-3d;
perspective: 500px;
display: flex;
justify-content: center;
align-items: center;
}
div {
width: 200px;
height: 200px;
background: #000;
transform-style: preserve-3d;
}
JavaScript
// https://www.cnblogs.com/coco1s/p/16194072.html
const multiple = 20;
const mouseOverContainer = document.getElementsByTagName("body")[0];
const element = document.getElementById("element");
function transformElement(x, y) {
let box = element.getBoundingClientRect();
let calcX = -(y - box.y - (box.height / 2)) / multiple;
let calcY = (x - box.x - (box.width / 2)) / multiple;
element.style.transform = "rotateX("+ calcX +"deg) "
+ "rotateY("+ calcY +"deg)";
}
mouseOverContainer.addEventListener('mousemove', (e) => {
window.requestAnimationFrame(function(){
transformElement(e.clientX, e.clientY);
});
});