Fabricjs - 如何仅剪辑选定的对象?

时间:2013-05-18 10:16:30

标签: html5-canvas clipping fabricjs

我已经尝试了旧的和最新的1.1.13版本的fabricjs,但它们都不能仅对所选对象应用clipTo函数。如果只有一个对象并且需要剪辑它,那么没关系,但是当有更多对象并且尝试仅剪切所选对象时,所有其他对象也会被剪裁。最奇怪的行为是,在选择其他对象之前,剪辑将应用于所选对象,但在选择其他对象并尝试剪切它之后,所有已剪切的对象也会受到影响。 我想使用以下步骤来解决问题。

  1. 有两个对象,object1和object2。
  2. 我选择了object1并在其上应用了clipTo函数。
  3. 相应地剪切object1,并且不影响其他未选择的object2。到这儿还可以。
  4. 现在我选择object2并在其上应用clipTo函数。但此时clipTo函数也会影响未选中的object1。
  5. 请记住,我使用clipTo函数动态,而不是在对象初始化期间使用以下函数。

    var obj = canvas.getActiveObject();
    var roundness = dynamicValue; // get using jquery sliders
    if(obj)
       obj.clipTo = function(ctx) {
                 ctx.arc(0, 0, roundness, 0, Math.PI * 2, true);
       }
    canvas.renderAll();
    

    如何解决这个问题,请帮助。

1 个答案:

答案 0 :(得分:2)

保存最后一个activeObject并删除clipTo if activeObject!== lastActive。

    var obj = canvas.getActiveObject();

    if (!obj) return;

    if (lastActive && lastActive !== obj) {
        lastActive.clipTo = null;
    }

    var roundness = Math.round(Math.random() * 60, 2)
    obj.clipTo = function (ctx) {
        ctx.arc(0, 0, roundness, 0, Math.PI * 2, true);
    }
    lastActive = obj;
    canvas.renderAll();

看这里: http://jsfiddle.net/Kienz/qfgfj/