当前位置: 首页 > 知识库问答 >
问题:

计算旋转HTML元素的原点

潘飞英
2023-03-14

我目前正在处理一个关于如何在元素旋转之前找到初始点的问题。

在我的项目中,我有两个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:旋转时计算x、y点

但我在让我的项目正常工作方面经历了一段艰难的时光。在此方面的任何帮助都将不胜感激。如果我需要提供任何其他信息,请告诉我。

http://jsfiddle.net/aSr7J/1/这是问题的关键所在。目标是计算黑色轮廓框内的水框。该计算适用于0度和180度,在45度时非常不正确。

共有2个答案

罗安和
2023-03-14

我尝试了一种不同的方法,但也许它可以帮助你。我没有真正计算旋转,我只是将相同的变换应用于另一个div并计算偏移量。这是我的jsfiddle演示。

注1:我不确定您使用的是jQuery,所以我没有使用它。但这会使转换拷贝更容易
注2:我在演示中使用了前缀,因此如果您使用其他浏览器,可能需要更改这些前缀。javascript代码也处理其他前缀。

代码为:

function alignRedToBlue() {
    var blue = document.getElementById("blue"),
        blueStyle = window.getComputedStyle(blue, null),
        red = document.getElementById("red"),
        props = ["transform", "-moz-transform","-webkit-transform", "-ms-transform", "-o-transform"],
        index, prop;
    for (index in props) {
        prop = props[index];
        red.style[prop] = blueStyle.getPropertyValue(prop);
    }
    red.style.top = blue.offsetTop + (blue.offsetHeight - red.offsetHeight) / 2 + "px";
    red.style.left = blue.offsetLeft + (blue.offsetWidth - red.offsetWidth) / 2 + "px";
}
叶琦
2023-03-14

差异的来源是如何测量垂直Y坐标。在html坐标中,正Y是向下的,而在数学中,它被假定为向上的。

为了说明这一点,只需更改以下两行:

var dy = rotatedY - centerY;

var dy = centerY - rotatedY;

和改变

var initialY = dy2 + centerY;

var initialY = centerY - dy2;

这是JSFiddle。

 类似资料:
  • 我想数一数一条流的不同元素,我想知道为什么 不行,日蚀告诉我 类型收集器中的方法toMap(Function,Function,BinaryOperator)不适用于参数((s)- 顺便说一句,我知道这个解决方案: 所以我有两个问题: 我的第一个方法有什么错误 编辑:我自己解决了第一个问题: Java需要一个函数作为第二个参数。

  • 问题内容: 我想知道旋转JavaScript数组的最有效方法是什么。 我想出了这个解决方案,其中一个正数将数组向右旋转,而一个负数向左(): 然后可以使用这种方式: 在下面的评论中指出的那样,我上面的原始版本有一个缺陷,那就是正确的版本(附加返回值允许链接): 是否有可能在JavaScript框架中更紧凑和/或更快速的解决方案?(以下任何一种建议的版本都不会更紧凑或更快速) 有没有内置数组旋转的J

  • 问题内容: 能够将常规元素临时转换为会非常有用。例如,假设我有一个想要翻转的样式。我想动态创建画布,将其“渲染” 到画布中,隐藏原始元素并为画布设置动画。 能做到吗 问题答案: 抱歉,浏览器无法将HTML渲染到画布中。 如果可能的话,这将带来潜在的安全风险,因为HTML可以包含来自第三方站点的内容(尤其是图像和iframe)。如果可以将HTML内容转换为图像,然后读取图像数据,则有可能从其他站点提

  • 问题内容: 是否有直接函数来计算CosmosDb查询中的不同元素? 这是默认计数: 和无数的独特作品: 但这会返回错误的请求-语法错误: 会和他们一起工作吗? 问题答案: 这是另一个解决地区问题并适用于的查询。基本上,您需要封装不重复内容然后进行计数。我们已经通过分页对它进行了测试,以查找您想要唯一记录的情况,而不仅是计数,而且它正在起作用。 您还可以根据条件所基于的内容,在括号的内部和外部使用子

  • 本文向大家介绍计算C ++中排序后的旋转数组中小于或等于给定值的元素,包括了计算C ++中排序后的旋转数组中小于或等于给定值的元素的使用技巧和注意事项,需要的朋友参考一下 给我们一个整数数组。该数组是已排序的旋转数组。目的是找到等于或小于给定数K的数组中的元素数。 方法是遍历整个数组并计算小于或等于K的元素。 输入值 输出结果 说明-元素<= 4是1,2,3,4 Count = 4 输入值 输出结

  • 问题内容: 我的图层有CSS样式: 有没有办法通过jQuery获得当前旋转值? 我试过了 结果是并不能告诉我很多。我想要得到的是。 问题答案: 这是我使用jQuery的解决方案。 这将返回一个数值,该数值对应于应用于任何HTML元素的旋转。 等等…