javascript - 在另一个 Canvas 中添加 Canvas : obj. setCoords 不是函数(fabric js)

标签 javascript html canvas html5-canvas fabricjs

开始使用 fabric.js 并尝试在另一个 Canvas 中添加一个 Canvas ,以便顶部 Canvas 保持不变,我将向内部 Canvas 添加对象。

这是将一个 Canvas 添加到另一个 Canvas 的片段。

canvas  = new fabric.Canvas('artcanvas');
innerCanvas = new fabric.Canvas("innerCanvas");
canvas.add(innerCanvas);

我的 html 看起来像这样

<canvas id="artcanvas" width="500" height="500"></canvas>
<canvas id="innerCanvas" width="200" height="200" ></canvas>

成功添加这些后,我要做的是,将坐标添加到内部 Canvas ,以便最终用户看起来像一个在另一个上。

但是,尝试过的代码遇到了以下错误

    Uncaught TypeError: obj.setCoords is not a function
    at klass._onObjectAdded (fabric.js:6894)
    at klass.add (fabric.js:231)
    at main.js:60
    at fabric.js:19435
    at HTMLImageElement.fabric.util.loadImage.img.onload (fabric.js:754)
_onObjectAdded @ fabric.js:6894
add @ fabric.js:231
(anonymous) @ main.js:60
(anonymous) @ fabric.js:19435
fabric.util.loadImage.img.onload @ fabric.js:754

查看错误消息,刚转到错误行,这是我在 chrome 控制台中找到的内容

enter image description here

有人可以指出我代码中的错误吗?

最佳答案

在经历了 no.of 讨论和互联网解决方案之后,我暂时将 Fabric Rectangle 用作裁剪器并设置它的边界,以便用户可以在该特定裁剪器中放置/玩耍。

红色虚线(下图)是我的裁剪器,现在我可以绑定(bind)删除,下面是使用裁剪器添加图像的代码。

function addImageToCanvas(imgSrc) { 
    fabric.Object.prototype.transparentCorners = false;    
    fabric.Image.fromURL(imgSrc, function(myImg) {
        var img1 = myImg.set({
            left: 20,
            top: 20,
            width: 460,
            height: 460
        });
        img1.selectable = false;
        canvas.add(img1);

        var clipRectangle = new fabric.Rect({
            originX: 'left',
            originY: 'top',
            left: 150,
            top: 150,
            width: 200,
            height: 200,
            fill: 'transparent',
            /* use transparent for no fill */
            strokeDashArray: [10, 10],
            stroke: 'red',
            selectable: false
        });

        clipRectangle.set({
            clipFor: 'layer'
        });
        canvas.add(clipRectangle);

    });
}

enter image description here

现在,在将任何图像/图层附加到 Canvas 时,我将该图像/图层/文本绑定(bind)到我创建的剪裁器。

function addLayerToCanvas(laImg) {

    var height = $(laImg).height();
    var width = $(laImg).width();
    var clickedImage = new Image();
    clickedImage.onload = function(img) {

        var pug = new fabric.Image(clickedImage, {

            width: width,
            height: height,
            left: 150,
            top: 150,
            clipName: 'layer',
            clipTo: function(ctx) {
                return _.bind(clipByName, pug)(ctx)
            }
        });
        canvas.add(pug);
    };
    clickedImage.src = $(laImg).attr("src");

}

在边界限制之后,看起来像enter image description here

这是我用一些静态图像 url 创建的 fiddle 。

https://jsfiddle.net/sureshatta/yxuoav39/

所以我现在继续使用这个解决方案,我真的觉得它很老套而且很脏。寻找其他一些干净的解决方案。

关于javascript - 在另一个 Canvas 中添加 Canvas : obj. setCoords 不是函数(fabric js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44434944/

相关文章:

javascript - 根据数组的一个属性按字母顺序对数组中的对象进行排序

php - php 和 Javascript/Ajax 共享 JSON 数据

php - HTML - 包含特殊字符时不发送表单字段

javascript - 在 Canvas 内创建可滚动文本

javascript - 我可以为圆弧的结束 Angular 设置动画吗?

javascript - 如何在就绪时设置间隔,在 textarea 焦点处停止,然后在 textarea focusout 处开始?

javascript - 每当我将更改推送到 GitHub 时,是否可以自动将我网站上的最后更新日期更改为当前日期?

html - 如何在文档内部指定文档的编码?

javascript - 应用于导航栏的台式机和笔记本电脑的屏幕宽度

javascript - Canvas 变换后,如何获取正在绘制的对象的 2d 尺寸,以便在 Canvas 2d 上进行 HitTest ?