【问题标题】:How can I update the top left position after resizing a rotated object?调整旋转对象的大小后如何更新左上角的位置?
【发布时间】:2017-08-09 20:07:06
【问题描述】:

我有一个可以通过它的 4 个边中的任何一个以及它的 4 个角中的任何一个来调整大小的对象。

现在我正在尝试使其可旋转,并且我正在使用 CSS 属性 translate: rotate(angle) 这样做,并且锚点是对象的中心。

对象具有顶部、左侧、宽度、高度和角度的属性。

问题是,一旦它旋转,如果我需要从右下角调整它的大小,它不会保持左上角的位置,同时仍然保持中心锚点。

我需要找到一种方法来通过更新它来保持左上角的位置,可能使用一些三角函数。

document.getElementById("button").addEventListener("click", function() {
  var obj = document.getElementById("object");

  console.log(obj.style.top, obj.style.left); // 100, 100

  obj.style.width = "200px";
  obj.style.height = "200px";

  // Something needs to be done here to update the top left position and keep it in place

});
div {
  position: absolute;
  top: 100px;
  left: 100px;
  width: 50px;
  height: 50px;
  background: red;
  transform-origin: 50% 50%;
  transform: rotate(20deg);
}
<div id="object"></div>
<button id="button">Resize bottom-right corner</button>

我有一个小提琴here

【问题讨论】:

  • 我会更关心点击按钮后出现的东西。
  • 这只是一个演示问题的示例代码。实际代码是用 React 编写的,依赖太多了,放在这里。

标签: javascript html css trigonometry


【解决方案1】:

我假设您正在尝试使其保持原位,因此只需添加:

obj.style.left = "25px";
obj.style.top = "25px";

设置高度和宽度后。 为了得到这个位置,我看到你让它的大小从 50 像素增加到 200 像素(增加了 4 倍),所以我把它变成了原始 x/y 的四分之一,把它放在“相同”的位置。

希望这会有所帮助! (codepen:http://codepen.io/JohnJ1101/pen/wJpJqE)

【讨论】:

  • 没有那么简单。我希望左上角保持在原位,所以我需要一个公式来获取新的顶部和左侧位置,以使其在我拉右下角以及向相反方向或任何其他方向拉时保持不变方向。
  • 尝试将 transform-origin 设置为 0% 0%
  • 我无法更改中心锚点。因为我应该能够从它的 8 个点中的任何一个中拉出对象来调整它的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2020-06-11
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多