基本上,您需要找到框中心点和鼠标光标点之间的向量,然后计算角度并将其转换为度数。然后只需通过 CSS 应用角度:
let box = document.querySelector(".box");
let boxBoundingRect = box.getBoundingClientRect();
let boxCenter= {
x: boxBoundingRect.left + boxBoundingRect.width/2,
y: boxBoundingRect.top + boxBoundingRect.height/2
};
document.addEventListener("mousemove", e => {
let angle = Math.atan2(e.pageX - boxCenter.x, - (e.pageY - boxCenter.y) )*(180 / Math.PI);
box.style.transform = `rotate(${angle}deg)`;
})
等等,什么?
好的,让我们把它拆开。这就是我们所拥有的:
矢量 AB 位于框的中心和鼠标位置之间。我们去计算 Θ (theta),它是 X 轴和 AB 之间的角度。
想象一条线从 B 向下平行于 Y 轴直到它接触 X 轴。使用那条线、AB 和 X 轴,我们得到一个三角形。这意味着我们可以使用 Arctan 函数来计算 theta。更准确地说,我们使用Arctan2的便利函数,当 y>0 时给出正角,当 y<0 时给出负角。
atan2 以弧度返回度数,而 CSS 使用度数,因此我们使用180/Math.PI
. (弧度是一个角度的度量,当绘制圆的圆心角时,它与长度等于圆半径长度的弧相交。-取自此处)
最后一个警告 - 由于在浏览器中 Y 轴是倒置的(意思是,你在页面中越往下走,Y 值就越高),我们不得不翻转 Y 轴:我们通过添加一个减号来做到这一点Y 项:
- (e.pageY - boxCenter[1])
我希望这有助于清除一些事情......
这是一个孤立的jsfiddle 示例
顺便说一句,你的游戏很难!:)