在 HTML5 中,我想实现对画布元素的转换功能,以便用户可以translate
(移动)、scale
(放大/缩小)和rotate
画布元素。每个这样的变换都可以用不同的变换原点来完成。
第一次转换很容易:
function transform(el, value, origin) {
el.style.Transform = value;
el.style.MozTransform = value;
el.style.msTransform = value;
el.style.OTransform = value;
el.style.webkitTransform = value;
el.style.TransformOrigin = origin;
el.style.MozTransformOrigin = origin;
el.style.msTransformOrigin = origin;
el.style.OTransformOrigin = origin;
el.style.webkitTransformOrigin = origin;
}
transform(myCanvas, 'translate('+ dx +'px, ' + dy + 'px) ' +
'scale(' + zoom + ', ' + zoom + ') ' +
'rotate(' + angle + 'deg)',
cx + 'px ' + cy + 'px');
用户将移动或缩放或旋转元素,而不是一次全部移动,因此一些转换参数将保持默认值(dx = 0, dy = 0, zoom = 1, angle = 0)。
在这样的转换之后,如果用户想要进行另一个转换(和另一个,另一个......),我如何将(dx1, dy1, zoom1, angle1, cx1, cy1)与(dx2, dy2, zoom2, angle2, cx2 , cy2)以获得可以在以后与新的转换参数组合的最终值?我不能将另一个转换附加到transform
参数,因为tranform-origin
可能会有所不同。是否有一个公式如何将变换与不同的变换原点结合起来?