格的寬度和高度。如果我有這些規則:調整後旋轉
width:50px; height:100px; -moz-transform: rotate(0deg)
,然後一個事件改變轉化爲:
-moz-transform: rotate(90deg)
邏輯,不應該是自動交換的寬度和高度?我需要旋轉來切換寬度和高度以進行精確的位置檢測。
感謝,
喬
格的寬度和高度。如果我有這些規則:調整後旋轉
width:50px; height:100px; -moz-transform: rotate(0deg)
,然後一個事件改變轉化爲:
-moz-transform: rotate(90deg)
邏輯,不應該是自動交換的寬度和高度?我需要旋轉來切換寬度和高度以進行精確的位置檢測。
感謝,
喬
好像一切後的變換應用,所以不更新寬度和高度。我能想到的最好的辦法是你自己計算旋轉的尺寸,使用旋轉矩陣:
[ cos X -sin X ] [ width ]
[ sin X cos X ] [ height ]
它的簡單翻譯成JavaScript這一點。您需要旋轉所有四個角(0,0)(w,0)(0,h)(w,h),然後旋轉的尺寸是旋轉的邊界矩形的寬度和高度。
var angle = angle_in_degrees * Math.PI/180,
sin = Math.sin(angle),
cos = Math.cos(angle);
// (0,0) stays as (0, 0)
// (w,0) rotation
var x1 = cos * width,
y1 = sin * width;
// (0,h) rotation
var x2 = -sin * height,
y2 = cos * height;
// (w,h) rotation
var x3 = cos * width - sin * height,
y3 = sin * width + cos * height;
var minX = Math.min(0, x1, x2, x3),
maxX = Math.max(0, x1, x2, x3),
minY = Math.min(0, y1, y2, y3),
maxY = Math.max(0, y1, y2, y3);
var rotatedWidth = maxX - minX,
rotatedHeight = maxY - minY;
下面是我已經實現的最優雅的JavaScript解決方案。
// suppose, we know width, height and rotation angle (deg)
var width, height, angle;
var rad = angle * Math.PI/180,
sin = Math.sin(rad),
cos = Math.cos(rad);
var newWidth = Math.abs(width * cos) + Math.abs(height * sin),
newHeight = Math.abs(width * sin) + Math.abs(height * cos);
這就是爲什麼每當你看到網絡上旋轉的文本,它是一個形象.. – T4NK3R 2012-04-03 08:28:37
我不能@ T4NK3R贊同,這雖然我學的變換矩陣枯竭在讀研究生。並不是說以上是「難」。但爲什麼!?這不應該由原始變換明顯處理? – seebiscuit 2014-09-18 20:23:29