这个问题是问题的后续问题:width/height after transform。
我发布了一个新问题,因为这个问题只能解决宽度而不是高度。 公式:
var x = $('#box').width()*Math.cos(rotationAngle)
+ $('#box').height()*Math.sin(rotationAngle);
适用于宽度,计算高度的等效公式是什么?
感谢。
答案 0 :(得分:7)
这是我提出的最好的工作方式:
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));
答案 1 :(得分:1)
以下代码将计算出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>
&#13;
答案 2 :(得分:0)
好吧,你之前的问题涉及一个正方形。正方形具有相同的尺寸。所以,除非有一些时髦的东西,否则你的身高应与你的宽度完全相同。
答案 3 :(得分:0)
如果角度值为负,则@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>