这个问题是对以下问题的跟进:转换后的宽度/高度。
我发布了一个新问题,因为该问题只解决了宽度而不是高度。公式:
var x = $('#box').width()*Math.cos(rotationAngle)
+ $('#box').height()*Math.sin(rotationAngle);
适用于宽度,计算高度的等效公式是什么?
谢谢。
这个问题是对以下问题的跟进:转换后的宽度/高度。
我发布了一个新问题,因为该问题只解决了宽度而不是高度。公式:
var x = $('#box').width()*Math.cos(rotationAngle)
+ $('#box').height()*Math.sin(rotationAngle);
适用于宽度,计算高度的等效公式是什么?
谢谢。
这是我想出的最好的工作公式:
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));
下面的代码将计算出 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>
如果角度值为负,@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>
好吧,您之前的问题涉及一个正方形。正方形的尺寸始终相同。所以,除非有什么奇怪的事情发生,你的高度应该和你的宽度完全一样。