我目前正在处理如何在元素旋转之前找到初始点的问题 .
在我的项目中,我有两个div不能在彼此相同的容器中导致我遇到的问题 .
我正在尝试计算已经旋转的元素的初始点,这样我就能正确地将另一个元素放在它上面,然后应用相同的旋转度 . 为了确保我有正确的坐标可以使用,我有一个div,每次旋转发生时都会标记一个小方块 . 初始点的蓝色方块和旋转元素的中心点的红色方块 . 我以为我在Javascript中有公式,但似乎有一些东西 . 我离0度或180度越远,我的其他元素越远离它应该的位置 . 以下是我目前的公式 .
var angle = (integer passed in to the function. Example: 45)
var rotatedX = blueBox.getBoundingClientRect().left;
var rotatedY = blueBox.getBoundingClientRect().top;
var centerX = redBox.getBoundingClientRect().left;
var centerY = redBox.getBoundingClientRect().top;
var dx = rotatedX - centerX;
var dy = rotatedY - centerY;
var toRadians = (Math.PI / 180);
var dx2 = dx * Math.cos(toRadians * angle) - dy * Math.sin(toRadians * angle);
var dy2 = dx * Math.sin(toRadians * angle) + dy * Math.cos(toRadians * angle);
var initialX = dx2 + centerX;
var initialY = dy2 + centerY;
elementToRotate.style.top = initialX + "px";
elementToRotate.style.left = initialY + "px";
//This just applies the CSS transform:rotate(45deg) to the element
elementToRotate.rotateDegrees(angle);
我最初在这里使用公式:HTML5 Canvas: Calculating a x,y point when rotated
但是我正在努力让我的项目正常运作 . 非常感谢任何帮助 . 如果我需要提供任何其他信息,请告诉我 .
http://jsfiddle.net/aSr7J/1/ `` 这是问题的JS小提琴 . 目标是计算黑色框内的水箱 . 计算适用于0度和180度,并且在45度时非常不正确 .
2 回答
差异的来源是如何测量垂直Y坐标 . 在html坐标中,正Y是向下的,而在数学中,假设是向上的 .
要解决这个问题,只需更改以下两行:
至
并改变
至
这是JSFiddle .
我尝试了不同的方法,但也许它可以帮到你 . 我没有真正计算旋转,我只是将相同的变换应用于另一个div并计算了偏移量 . 这是我的jsfiddle demo .
注1:我没有't sure you'使用jQuery,所以我没有使用它 . 但它会使转换副本更容易 .
注意2:我在我的演示中使用了
-webkit-
前缀,所以如果您使用其他浏览器,可能需要更改这些前缀 . javascript代码也处理其他前缀 .代码是: