我有一个可以由用户旋转的可编辑内容。元素的大小auto
意味着它会在您输入时改变它的大小。问题是,如果您在旋转时在其中输入内容,它会移动
jsfiddle
问问题
146 次
1 回答
1
问题是旋转是反对 的transform-origin
,默认情况下是50% 50%
。当尺寸发生变化时,旋转点也会发生变化,这会导致运动。transform-origin
您可以通过以像素为单位设置字段来固定旋转点。它不会在您键入时移动,但如果您尝试更改旋转,它不会围绕元素中心(假设元素中心在您设置后已更改)。
所以在改变旋转角度之前,你需要重置transform-origin
到元素的中心,但是一旦你这样做了,元素的位置就会改变,所以你也需要纠正位置。获取改变前后边界框位置的差异,transform-origin
并将其添加到元素坐标中。这是一些代码(使用 Mootools 框架编写)
var correctRotatedElementPosition = function (element) {
var old_position = element.getBoundingClientRect();
var center = '50% 50%';
element.setStyles({
'transform-origin' : center,
'-webkit-transform-origin' : center,
'-ms-transform-origin' : center
});
var new_position = element.getBoundingClientRect();
var current_coordinates = element.getStyles(['left', 'top']);
var delta_left = old_position.left.toInt() - new_position.left.toInt();
var delta_top = old_position.top.toInt() - new_position.top.toInt();
this.element.setStyles({
'left' : current_coordinates.left.toInt() + delta_left,
'top' : current_coordinates.top.toInt() + delta_top
});
}
于 2013-11-11T09:40:25.287 回答