使用Raphael自由变换插件进行校正缩放

时间:2013-04-30 03:20:34

标签: svg raphael

我正在使用Raphael Free Transform插件来启用缩放,拖动和旋转。 在这个特殊情况下,我想要一个用于调整大小的句柄和另一个用于旋转的句柄,因此仅在轴x上设置缩放选项。我想通过在函数回调上进行校正来补偿y轴上的缩放,以避免“图像”失真。 我想让用户使用一个手柄重新调整raphael集的大小,并使用另一个手柄旋转raphael集。此外,我想保留由缩放引起的所有转换,这样一旦用户尝试拖动对象,它就不会丢失。

    var ft = paper.freeTransform(tmp, { scale: ['axisX'], rotate: ['axisY'] }, cbFreeTransform);

    function cbFreeTransform(s, e) {
        if (e.toString() == 'scale end') {

            for (var i = 0, l = tmp.length; i < l; i++) {
                var itm = tmp[i];
                itm.scale(1, s.attrs.scale.x);
            }

        }
    }

这是小提琴:jsFiddle

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

找到以下解决方案: 在'Scale End'事件中,我已将x比例因子分配给y比例因子和无呼叫转换应用方法。这似乎有效。

var ft = paper.freeTransform(tmp,{scale:['axisX'],rotate:['axisY']},cbFreeTransform);

function cbFreeTransform(s, e) {
    if (e.toString() == 'scale end') {    
       ft.attrs.scale.y = s.attrs.scale.x;
       ft.apply();
    }
}