7

这个问题是对以下问题的跟进:转换后的宽度/高度

我发布了一个新问题,因为该问题只解决了宽度而不是高度。公式:

var x = $('#box').width()*Math.cos(rotationAngle) 
      + $('#box').height()*Math.sin(rotationAngle);

适用于宽度,计算高度的等效公式是什么?

谢谢。

4

4 回答 4

11

这是我想出的最好的工作公式:

var h = $(obj).height() * Math.abs(Math.cos(deg)) + $(obj).width() * Math.abs(Math.sin(deg));
var w = $(obj).width() * Math.abs(Math.cos(deg)) + $(obj).height() * Math.abs(Math.sin(deg));
于 2013-06-18T06:19:26.333 回答
2

下面的代码将计算出 JavaScript 中旋转对象的边界框。

var obj = document.getElementById("obj"); // Get object
var bx = obj.clientWidth; // Width of rectangle
var by = obj.clientHeight; // Height of rectangle
var t = /[0-9]+/.exec(obj.style.transform)[0] * Math.PI / 180; // Convert to radians

var x = Math.sin(t) * by + Math.cos(t) * bx; // The bounding box width
var y = Math.sin(t) * bx + Math.cos(t) * by; // The bounding box height

document.write(x.toFixed(2), " ", y.toFixed(2)); // The width and height of finished bounding box of item rounded to 2 decimal places
<div id="obj" style="width: 200px; height: 200px; transform: rotate(30deg); background: red;"></div>

于 2017-09-08T02:26:55.840 回答
1

如果角度值为负,@ChiMo 的解决方案将不起作用。固定版本:

var obj = document.getElementById("obj"); // Get object
var bx = obj.clientWidth; // Width of rectangle
var by = obj.clientHeight; // Height of rectangle
var t = /[0-9]+/.exec(obj.style.transform)[0] * Math.PI / 180; // Convert to radians
var x = Math.sin(t) * by + Math.cos(t) * bx; // The bounding box width
var y = Math.sin(t) * bx + Math.cos(t) * by; // The bounding box height

document.write(x.toFixed(2), " ", y.toFixed(2)); // The width and height of finished bounding box of item rounded to 2 decimal places

var wrapper = document.getElementById("wrapper"); // Get object
wrapper.style.width = Math.round(x) + 'px';
wrapper.style.height = Math.round(y) + 'px';
#obj {
  width: 100px;
  height: 100px;
  background-color: red;
}

#wrapper {
  border: 1px solid black;
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  justify-content: center;
}
<div id="wrapper">
  <div id="obj" style="transform: rotate(-30deg)"></div>
</div>

于 2020-08-31T12:20:07.223 回答
0

好吧,您之前的问题涉及一个正方形。正方形的尺寸始终相同。所以,除非有什么奇怪的事情发生,你的高度应该和你的宽度完全一样。

于 2013-06-09T10:40:00.047 回答