如果你变换rotate,它看起来可以工作,但是你必须移动鼠标光标到浏览器的左上方才能工作。我希望当我相对于蓝色正方形元素的中心移动鼠标光标时,它才能工作。我应该怎么做?
window.addEventListener("mousemove", (e) => {
const card = document.querySelector(".card");
const body = document.querySelector("body");
const w = card.clientWidth;
const h = card.clientHeight;
const bodyRect = body.getBoundingClientRect();
const cardRect = card.getBoundingClientRect();
const left = cardRect.left - bodyRect.left + (card.clientWidth/2);
const top = cardRect.top - bodyRect.top + (card.clientHeight/2);
console.log(`cardRect.left : ${cardRect.left}, bodyRect.left : ${bodyRect.left}, card.clientWidth/2 : ${card.clientWidth/2}`);
console.log(`cardRect.top : ${cardRect.top}, bodyRect.top : ${bodyRect.top}, card.clientHeight/2 : ${card.clientHeight/2}`);
const rotx = (e.pageY - top) / e.pageY;
const roty = (e.pageX - left) / e.pageX;
console.log(`roty : ${roty}, rotx : ${rotx}`)
card.style.msTransform = `rotateX(${rotx}deg) rotateY(${roty}deg)`;
card.style.webkitTransform = `rotateX(${rotx}deg) rotateY(${roty}deg)`;
card.style.transform = `rotateX(${rotx}deg) rotateY(${roty}deg)`;
});
.card {
width: 400px;
height: 400px;
background-color: #00f;
margin: 0 auto;
padding: 0;
transform-style: preserve-3d;
transform: perspective(400px);
will-change: transform;
}
<div class="card">
</div>
2条答案
按热度按时间pepwfjgg1#
你的数学到处都是。看看你计算/log的旋转Angular ,它们几乎在整个屏幕上都〈5deg。
vql8enpb2#
你的rotx和roty公式是错误的。试试这些:
下面是一个片段来演示。
x一个一个一个一个x一个一个二个一个x一个一个三个一个