【问题标题】:Fabricjs - how to clip only selected object?Fabricjs - 如何仅剪辑选定的对象?
【发布时间】:2014-03-08 04:55:10
【问题描述】:

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

  1. 有两个对象,object1 和 object2。
  2. 我选择了 object1 并对其应用了 clipTo 函数。
  3. object1 被相应地剪裁,其他未选择的 object2 不受影响。到这里还可以。
  4. 现在我选择 object2 并对其应用 clipTo 函数。但此时clipTo函数也会影响未被选中的object1。

请记住,我是动态使用 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();

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

【问题讨论】:

  • 完整代码的小技巧可能有助于找到问题
  • 然后你从第一个对象中删除clipTo

标签: html5-canvas clipping fabricjs


【解决方案1】:

如果 activeObject !== lastActive 则保存最后一个 activeObject 并删除 clipTo。

    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/

【讨论】:

  • jsfiddle.net/qfgfj/5 Draw shape() 我所做的在更改选择以绘制不同形状时调用,这适用于除矩形以外的所有形状,即 5 选项。你能说说为什么 rect 不能使用变量吗?
  • 我通过将 value 解析为 number 解决了这个问题。 obj.setHeight() 取数
猜你喜欢
  • 2015-12-31
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多