fabricjs放置在较大的对象上时较小的对象选择

时间:2014-04-21 09:32:54

标签: javascript fabricjs

我正在使用fabric.js,当我有一个较小的对象(w.r.t高度和宽度或缩小为较小)放置在一个更大的对象上时,我无法在点击时选择较小的对象

我甚至尝试过以下方法,它解决了我的可选问题,但缺点是我在边界处失去了缩放,我无法在实现下面后缩放对象。

您可以尝试相同的以下urlhttp://fabricjs.com/events/查看我附上的截图,我已经缩放了红色方块,并在其上放置了一个较小的绿色方块。完成此展示位置后,我无法选择绿色方块。

canvas.on('mouse:up',function(e){

canvas.setActiveObject(canvas.item(e.target));

});

smaller objects over bigger objects do not get selected on click

2 个答案:

答案 0 :(得分:2)

由于“优化”,它是一个已知问题https://github.com/kangax/fabric.js/issues/1188

我通过在_searchPossibleTargets中注释掉第一个if语句来解决它,

fabric.util.object.extend(fabric.Canvas.prototype, {
    _searchPossibleTargets: function(e) {

        // Cache all targets where their bounding box contains point.
        var target,
            pointer = this.getPointer(e);

        /*
        if (this._activeObject && this._checkTarget(e, this._activeObject, pointer)) {
            this.relatedTarget = this._activeObject;
            return this._activeObject;
        }
        */

        var i = this._objects.length;

        while(i--) {
            if (this._checkTarget(e, this._objects[i], pointer)){
                this.relatedTarget = this._objects[i];
                target = this._objects[i];
                break;
            }
        }

        return target;
    }
});

if的目的是返回鼠标在其中的当前活动对象,而不管对象顺序如何。如果你有大量的对象并且阻止你在它之前检查所有对象,它就是一个优化。

答案 1 :(得分:1)

您使用的是哪个版本?当我将1.4.0更新到1.4.4时,我遇到了同样的问题。 我不得不回到1.4.0。也许版本1.4.0适用于你。